あなたの質問はこのスレッドHow would I set the label of my UserControl at design time?の部分複製ですが、TextBox
から継承しており、UserControl
ではなく、初期化ルーチンが少し異なるため、そこに答えがありません。既定のテキストコントロールがすべてデザイナーによって最初に作成されたときに、プロパティをName
プロパティに設定しているので、不都合なことはあなたが求めていることを行うのは直感的ではありません。
このトリックは、お客様のコンポーネント用にControlDesigner
(System.Windows.Forms.Design
)を実装しています。 ControlDesigner.InitializeNewComponent
は、新しいコントロールがフォーム上に作成されるたびに、WinFormsデザイナーによって一度呼び出されます。これはText
プロパティをName
プロパティに設定する機会です。設計者以外のコードで副作用を起こすことなく、またデザイナのコンポーネントのシリアル化を妨げることもありません。
私は、これはデザイナーで動作検証 - それは適切に設計者の生成Name
フィールドに一致するようにText
フィールドを設定しますが、コントロールがデザイナーによって作成された後、Text
とName
フィールドは単にデフォルトのように、個別に編集可能なままTextBox
またはLabel
対照。
この作業を行うには、System.Windows.Forms.Design
名前空間を含むSystem.Design
へのプロジェクト参照を追加する必要があります。 3を上書きすることが分かっていない適切な方法)コンポーネントが有効でないタイプです:
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Forms.Design;
namespace StackOverflowAnswers.CustomControlDefaultText
{
class CustomTextBoxDesigner : ControlDesigner
{
public CustomTextBoxDesigner()
{
}
public override void InitializeNewComponent(IDictionary defaultValues)
{
// Allow the base implementation to set default values,
// which are provided by the designer.
base.InitializeNewComponent(defaultValues);
// Now that all the basic properties are set, we
// do our one little step here. Component is a
// property exposed by ControlDesigner and refers to
// the current IComponent being designed.
CustomTextBox myTextBox = Component as CustomTextBox;
if(myTextBox != null)
{
myTextBox.Text = myTextBox.Name;
}
}
}
// This attribute sets the designer for your derived version of TextBox
[Designer(typeof(CustomTextBoxDesigner))]
class CustomTextBox : TextBox
{
public CustomTextBox() : base()
{
ReadOnly = true;
TabStop = false;
BorderStyle = BorderStyle.None;
}
}
}
私は3つのエラー 1)ControlDesignerが 2)が見つかりませんでした「CustomTextBoxDesigner.InitializeNewComponent(IDictionaryを)」を取得しています与えられたコンテキストで – Signum
私が提供したコードサンプルの最上部にすべての 'using'ステートメントを含めましたか? – ozeanix
はい、using System.Windows.Forms.Design; Visual Studio上ではグレーになります。 – Signum