2017-08-03 6 views
0

私はCue(フィラーテキスト)CueColor(フィラーテキストの色)性質を持つカスタムコントロールのテキストボックスを作ってるんだがトリガーカスタムコントロールのテキストボックスを作成します。私はEnterLeaveイベントをテキストボックス内に作成し、キューを調整しました。しかし、私はそれを適用しようとすると、私のIDE(Visual Studio 2015、これは役立ちます)がクラッシュします。Cの#:イベント

私は同様の質問をいくつかの記事を読んで:私は私の問題は同じソリューションを持っている場合はかなりよく分からない Winforms user controls custom events

が。私はそれをどのように機能させるのですか?ここではわかりやすくするために私のコードは次のとおりです。

class CueTextBox : TextBox 
    { 
     public string Cue 
     { 
      get { return Cue; } 
      set { Cue = value;} 
     } 

     public Color CueColor 
     { 
      get { return CueColor; } 
      set { CueColor = value; } 
     } 

     private void CueTextBox_Enter(object sender, EventArgs e) 
     { 
      TextBox t = sender as TextBox; 
      if (t.ForeColor == this.CueColor) 
      { 
       t.Text = ""; 
       t.ForeColor = this.ForeColor; 
      } 
     } 

     private void CueTextBox_Leave(object sender, EventArgs e) 
     { 
      TextBox t = sender as TextBox; 
      if (t.Text.Trim().Length == 0) 
      { 
       t.Text = Cue; 
       t.ForeColor = this.CueColor; 
      } 
     } 
    } 
+0

プロジェクトをコンパイルする前に、カスタムコントロールのDLLをライブラリに追加しておく必要があります。 – Tehmina

+0

カスタムコントロールのDLLはどこにありますか? –

+0

これをチェックして、問題が解決することを願っています。ありがとうhttp://www.c-sharpcorner.com/UploadFile/ehtesham.dotnet/how-to-create-a-custom-control/ – Tehmina

答えて

1

私はあなたのコードで見る唯一のものは、プロパティ定義は、自分自身を再帰的に呼び出していると、デザインサーフェイスにコントロールを追加するとき、これは、スタックオーバーフローが発生するということです。

public string Cue 
    { 
     get { return Cue; } 
     set { Cue = value;} 
    } 

バッキングフィールドを定義するか、自動実装されたプロパティを使用します。

private string cue = String.Empty; 
    public string Cue 
     { 
     get { return cue; } 
     set { cue = value; } 
     } 

または

public string Cue { get; set; } 

あなたの質問は、イベントハンドラを追加する暗黙の問題を引き起こしました。これは、カスタムコントロールの問題となることがあります。条件付きでコードを実行できるようにすることを目的としたControl.DesignModeプロパティがあります。ただし、コンストラクタでは動作しません。 IDEがアクティブかどうかを判断するには、ちょっとハックをする必要があります。

このプロパティは、DesignModeの代わりにVisual Studioでの開発に使用できます。

private bool InDesignMode 
     { 
     get 
      { 
      return (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime) || 
        base.DesignMode || 
        (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv"); 
      } 
     } 

カスタムコントロールのソリューション開発では、自己虐待の練習問題です。 Project Properties-> Debugタブに行き、プログラムとして "devenv.exe"を使って "Start Action"を "Start External Program"に設定する方がよいでしょう。デバッガを「実行」すると、VSの新しいインスタンスが開始されます。新しいVSインスタンスのデザインサーフェイスにコントロールを追加すると、コントロールのコードをデバッグできます。ブレークポイントがヒットし、例外が表示されます。

+0

ああ、うわー。ありがとう!あなたはちょうど頭痛から私を救った。それがエラーであるとは決して考えなかった。 :) –

+0

@DonovanKeating、私はあなたがカスタムコントロールをさらに開発するのに役立つかもしれない情報をいくつか追加しました。 – TnTinMn