2016-06-23 7 views
1
私はコードの下に使用して Rectangleを描きたい

とWinフォームのグラフィックスをデータバインディング:<code>Paint</code>イベントにテキストボックス

e.Graphics.DrawRectangle(Pens.Red, x1, y1, width1, height1); 

がどのように私はC#を使用してFormTextBoxに矩形の幅/高さをデータバインドしますか? TextBox入力に基づいて矩形を描画するサイズを即座に変更したい。この問題を解決するために

答えて

1

は、これらの点を考慮してください。

  1. Rectanglestructで、データバインディングを設定するときに、あなたの構造がでBindingオブジェクトに渡されますので、あなたは、データバインディングのためにそれを使用することはできませんすべての変更は別のインスタンスで行われます。データバインディングのプロパティを保持するクラスが必要です。

  2. 図面を更新できるようにするには、図面のロジックを図面のPaintイベントに配置する必要があります。次に図面を更新する必要があるときは、図面面のメソッドInvalidateに電話してください。

  3. データバインディングを使用せずにテキストを変更した直後に矩形を再描画することができます。そのような場合は TextChangedのイベントで描画面の方法を呼び出し、入力した値を解析してPaintイベントに使用して矩形を描くだけで十分です。

この例ではIは、描画面としてFormを使用し、FormWidth1Height1プロパティを定義し、これらのプロパティにTextBoxコントロールを結合します。私は、フォーム上の絵をリフレッシュするためのプロパティのセッターでthis.Invalidate()を呼び出す:

public partial class Form1 : BaseForm 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     this.Load += Form1_Load; 
    } 
    int x1, y1, width1, height1; 
    public int Width1 
    { 
     get { return width1; } 
     set { width1 = value; this.Invalidate(); } 
    } 
    public int Height1 
    { 
     get { return height1; } 
     set { height1 = value; this.Invalidate(); } 
    } 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     x1 = 10; y1 = 10; Width1 = 100; Height1 = 100; 
     this.width1TextBox.DataBindings.Add("Text", this, "Width1", true, 
      DataSourceUpdateMode.OnPropertyChanged); 
     this.height1TextBox.DataBindings.Add("Text", this, "Height1", true, 
      DataSourceUpdateMode.OnPropertyChanged); 
     this.Paint += ProductListForm_Paint; 
    } 
    void ProductListForm_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.DrawRectangle(Pens.Red, x1, y1, Width1, Height1); 
    } 
} 
+0

おかげで、私が探していたまさにです.Thatたくさん。 – Niraj

+0

ところで、回答を受け入れると、回答の近くの上矢印をクリックして投稿に投票することもできます。それはまったく義務ではありませんが、合理的かつ推奨されています。 –

+0

申し訳ありませんReza、私は今朝それをやろうとしましたが、私がスタックフローで新しくなったので、私はそれが以前のように早くできなかったので、スタックフローに十分なポイントがありませんでした。とにかく私は今それをやった。それは私にとって人生の節約だったので、私はあなたのこの答えのために矢印を100回クリックしたいと思います。 – Niraj

関連する問題