0

私は現在、最初のユーザー コントロールに取り組んでおり、いくつかの小さな問題が発生しています。

コントロールは、画像をクリアするためPictureBoxのカスタムです。メソッドをButtonオーバーライドしてコントロールを無効にし、マウスの状態に基づいてコントロールに新しい境界線を描画します。OnPaint(PaintEventArgs e)MouseEnterMouseLeave

これはすべて正常に機能します。この問題は、(PictureBox に対して) 右上隅にボタンを追加したいときに発生します。

1. ボタンは、PictureBox に対して正しい位置にありません。0 番目の Y 座標に配置されていますが、X 座標は 100 の位置にあり、160 である必要があります。User Controls Width propertyボタンを配置するときに を使用していますが、default value代わりに 100 を取得しているようですフォーム上に PictureBox を作成するために割り当てられた 160 のうち。

CustomPictureBox cpic = new CustomPictureBox();
cpic.Location = new Point(20, 20);
cpic.Height = 80;
cpic.Width = 160;
this.Controls.Add(cpic);

ボタンは次のように追加されます。

btnClear = new Button();
btnClear.Width = 20;
btnClear.Height = 20;
btnClear.Location = new Point(this.Width - btnClear.Width, 0);
btnClear.Text = "X";
this.Controls.Add(btnClear);

この DefaultValue はどこから来て、コントロールの新しいインスタンスを初期化するときに指定された幅に従う代わりに、コントロールがそれを使用するのを防ぐにはどうすればよいでしょうか?

2. もう 1 つの問題は、ボタンが機能するためのイベントを取得できないことです。私はたくさんグーグルして、考えられることはすべて試しましたが、イベントはまだ発生していません:(

ボタンの MouseClick、MouseEnter、MouseLeave イベントをユーザー コントロールから直接フックできるようにする必要がありますか?

完全なコードを見たい場合は、ここで見つけることができます: http://pastebin.com/vL14Q5CX

ありがとう!

4

1 に答える 1

0

次の理由により、ボタンが期待どおりに整列していません。

  1. ボタンの位置は、ユーザー コントロールのコンストラクターで設定されています。
  2. 次に、ユーザー コントロールの幅がフォームに設定されます。
  3. ユーザー コントロールのサイズ変更イベントが処理されていません

ユーザー コントロールで Resize イベントを接続し、ボタンの位置を更新します。

private void CustomPictureBox1_Resize(object sender, EventArgs e)
{
    btnClear.Location = new Point(this.Width - btnClear.Width, 0);
}

ボタン クリック イベントが機能しない理由は、それらが親ユーザー コントロールにのみバブルアップするためです。コントロールをホストしているフォームでは受信されません。ユーザー コントロールのボタン クリック イベント内から起動する新しいカスタム イベント ハンドラーをユーザー コントロールに作成する必要があります。次に、フォームでそのカスタム イベント ハンドラーを処理します。

HTH

于 2012-11-29T20:40:15.037 に答える