Rectangle
を描きたい
とWinフォームのグラフィックスをデータバインディング:<code>Paint</code>イベントにテキストボックス
e.Graphics.DrawRectangle(Pens.Red, x1, y1, width1, height1);
がどのように私はC#を使用してForm
にTextBox
に矩形の幅/高さをデータバインドしますか? TextBox
入力に基づいて矩形を描画するサイズを即座に変更したい。この問題を解決するために
Rectangle
を描きたい
とWinフォームのグラフィックスをデータバインディング:<code>Paint</code>イベントにテキストボックス
e.Graphics.DrawRectangle(Pens.Red, x1, y1, width1, height1);
がどのように私はC#を使用してForm
にTextBox
に矩形の幅/高さをデータバインドしますか? TextBox
入力に基づいて矩形を描画するサイズを即座に変更したい。この問題を解決するために
は、これらの点を考慮してください。
Rectangle
はstruct
で、データバインディングを設定するときに、あなたの構造がでBinding
オブジェクトに渡されますので、あなたは、データバインディングのためにそれを使用することはできませんすべての変更は別のインスタンスで行われます。データバインディングのプロパティを保持するクラスが必要です。
図面を更新できるようにするには、図面のロジックを図面のPaint
イベントに配置する必要があります。次に図面を更新する必要があるときは、図面面のメソッドInvalidate
に電話してください。
データバインディングを使用せずにテキストを変更した直後に矩形を再描画することができます。そのような場合は TextChanged
のイベントで描画面の方法を呼び出し、入力した値を解析してPaint
イベントに使用して矩形を描くだけで十分です。
例
この例ではIは、描画面としてForm
を使用し、Form
でWidth1
とHeight1
プロパティを定義し、これらのプロパティに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);
}
}
おかげで、私が探していたまさにです.Thatたくさん。 – Niraj
ところで、回答を受け入れると、回答の近くの上矢印をクリックして投稿に投票することもできます。それはまったく義務ではありませんが、合理的かつ推奨されています。 –
申し訳ありませんReza、私は今朝それをやろうとしましたが、私がスタックフローで新しくなったので、私はそれが以前のように早くできなかったので、スタックフローに十分なポイントがありませんでした。とにかく私は今それをやった。それは私にとって人生の節約だったので、私はあなたのこの答えのために矢印を100回クリックしたいと思います。 – Niraj