2017-06-12 20 views
-1

&ドラッグしたときにカスタムのTextBoxを作成しようとしていますが、ラベルやボタンのように "customTextBox1"、 "customTextBox2"と表示されます。C#カスタムTextBoxのデフォルトのテキストを設定します

私はこれを実行しようとしました:

public CustomTextBox() 
    { 
     InitializeComponent(); 

     ReadOnly = true; 
     TabStop = false; 
     BorderStyle = BorderStyle.None; 
     Text = "customTextBox"; 
    } 

他のプロパティが正常に動作が、私はcustomTextBoxまたはテキストをドラッグした後、プログラムを構築したり、起動する必要があるテキストが空のまま表示して多数のためにcustomTextBoxは、さらにCustomTextBoxをドラッグした後には上がらない。

注:私はPlaceHolderなどは必要ありません。

答えて

0

あなたの質問はこのスレッドHow would I set the label of my UserControl at design time?の部分複製ですが、TextBoxから継承しており、UserControlではなく、初期化ルーチンが少し異なるため、そこに答えがありません。既定のテキストコントロールがすべてデザイナーによって最初に作成されたときに、プロパティをNameプロパティに設定しているので、不都合なことはあなたが求めていることを行うのは直感的ではありません。

このトリックは、お客様のコンポーネント用にControlDesignerSystem.Windows.Forms.Design)を実装しています。 ControlDesigner.InitializeNewComponentは、新しいコントロールがフォーム上に作成されるたびに、WinFormsデザイナーによって一度呼び出されます。これはTextプロパティをNameプロパティに設定する機会です。設計者以外のコードで副作用を起こすことなく、またデザイナのコンポーネントのシリアル化を妨げることもありません。

私は、これはデザイナーで動作検証 - それは適切に設計者の生成Nameフィールドに一致するようにTextフィールドを設定しますが、コントロールがデザイナーによって作成された後、TextNameフィールドは単にデフォルトのように、個別に編集可能なまま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; 
     } 
    } 
} 
+0

私は3つのエラー 1)ControlDesignerが 2)が見つかりませんでした「CustomTextBoxDesigner.InitializeNewComponent(IDictionaryを)」を取得しています与えられたコンテキストで – Signum

+0

私が提供したコードサンプルの最上部にすべての 'using'ステートメントを含めましたか? – ozeanix

+0

はい、using System.Windows.Forms.Design; Visual Studio上ではグレーになります。 – Signum

関連する問題