0

申し訳ありませんが、これはちょっと初心者の質問ですが、私は通り抜けていません。4つのパネルコントロールを備えたWindowsフォームアプリケーションがあります。ここで、ユーザーがマウスでホバーすると、パネルの背景が変わるようにします。私は以下を試しました:

private void Panel1_MouseIn(object sender, EventArgs e)
{
    panel1.BackColor = Color.Red;
}

private void Panel1_MouseOut(object sender, EventArgs e)
{
    panel1.BackColor = Color.Blue;
}

これは正常に機能していますが、パネルが4つあり、1つではないため、このような関数をさらに6つ追加する必要があります...すべての関数に対して1つの関数を作成しようとしましたが、イベント送信者にはアクセス可能なBackColorプロパティがありません。

すべてのパネルに対して単一のMouseIn関数を作成する方法はありますか?はいの場合、どのように?

4

5 に答える 5

3

送信者オブジェクトを次のようなパネルにキャストできます

Panel panel = (Panel)sender;
if(panel != null)
// Set the BackColor
于 2013-02-25T10:28:12.200 に答える
3

最初に送信者オブジェクトをPanelにキャストする必要があります。

Panel panel = sender as Panel;
if (panel == null)
    return;

panel.BackColor = Blue;
于 2013-02-25T10:28:16.317 に答える
3

あなたはそれをキャストする必要があります:

private void Panel_MouseIn(object sender, EventArgs e)
{
  Panel pan = sender as Panel;
  pan.BackColor = Color.Red;
} 

そして、この1つの関数を4つのパネルすべてにイベントハンドラーとして使用します

于 2013-02-25T10:26:45.910 に答える
1

MouseInとのイベントハンドラーを定義できますMouseOut

private void Panel1_MouseIn(object sender, EventArgs e)
{
    Panel p = sender as Panel;
    if(p == panel1){
        //set color  
    }
    else if(p == panel2){
       //set color
    }
...
}  

同じMouseOut

于 2013-02-25T10:29:00.190 に答える
0

マウスインと関数の内部で、配置したすべてのコードを削除し、以下に1行の簡単なコードを記述してください。

((Control)sender).BackColor = Color.Red;
于 2020-10-24T03:47:48.650 に答える