ボタンの少ないウィンドウフォームを作成しました。カーソルが各ボタンを指しているときに、ボタンがポップアウトまたはズームし、カーソルがそのボタンから削除されると、通常のサイズになります。
5 に答える
次のようになります。
Button.MouseEnter += new EventHandler(delegate(object Sender, EventArgs e) { Button.Size = new Size(Button.Size.Width + 50, Button.Size.Height + 50); } Button.Location = new Point(Button.Location.X - (50 / 2), Button.Location.Y - (50 / 2)});
Button.MouseLeave += new EventHandler(delegate(object Sender, EventArgs e) { Button.Size = new Size(Button.Size.Width - 50, Button.Size.Height - 50 }; Button.Location = new Point(Button.Location.X + (50 / 2), Button.Location.Y + (50 / 2)});
Button.GotFocus += new EventHandler(delegate(object Sender, EventArgs e) { Button.Size = new Size(Button.Size.Width + 50, Button.Size.Height + 50); } Button.Location = new Point(Button.Location.X - (50 / 2), Button.Location.Y - (50 / 2)});
Button.LostFocus += new EventHandler(delegate(object Sender, EventArgs e) { Button.Size = new Size(Button.Size.Width - 50, Button.Size.Height - 50 }; Button.Location = new Point(Button.Location.X + (50 / 2), Button.Location.Y + (50 / 2)});
「This.controls」イベントをループし、各ボタンを定義してから、このイベントを追加することもできます。これはスクリプトです。ほとんど何でもできます =)
ボタンのサイズは、mouse-enter-event のコードで変更できます。mouse-leave-eventでリセットします。
マウスの入力および終了イベントでボタンのサイズを変更するか、1 つは小さい、もう 1 つは大きい 2 つの画像を作成し、これらのイベントで画像を変更することができます。
キーボードナビゲーションを考慮して、MouseEnter/MouseLeaveイベントとGotFocus/LostFocusイベントの両方を処理する必要があります。
このような効果は、WPFアプリケーションでははるかに簡単です。視覚効果が必要な場合は、おそらくWPFアプリの作成を検討する必要があります。ボタンのxaml(コントロールテンプレート内)でスケール変換をチェックして、コードの記述を避け、任意のボタンにアタッチできる方法でボタンをスケーリングすることで同様の要件が処理される「ズーム」を実行します。
最も簡単な方法はを使用することのようSetBounds
です。Control.Scale
すべての子コントロールを含むウィンドウ全体を拡大縮小することを前提としているため、うまく機能しません。したがって、常にビューポート(この場合はウィンドウクライアントフレーム)の左上隅から拡大縮小されます。
Button b;
public Form1()
{
InitializeComponent();
b = new Button();
b.Text = "Hover me";
b.Top = 100;
b.Left = 100;
b.Size = new Size(80, 30);
this.Controls.Add(b);
b.MouseEnter += delegate(object sender, EventArgs e)
{
b.SetBounds(b.Left - 5, b.Top - 2, b.Width + 10, b.Height + 4);
};
b.MouseLeave += delegate(object sender, EventArgs e)
{
b.SetBounds(b.Left + 5, b.Top + 2, b.Width - 10, b.Height - 4);
};
}