2017-10-05 5 views
2

randomLabelをイベントを発生させるsenderとして使用するコードがあります。このコードでは、senderのFontプロパティを微調整しようとしていますが、コンパイルエラーが発生しているようです。これを修正する方法はありますか?イベントで「送信者」を微調整するにはどうすればよいですか?

private void mainForm_Load(object sender, EventArgs e) 
    { 
     randomLabel.MouseEnter += RandomLabel_MouseEnter; 
    } 

    private void RandomLabel_MouseEnter(object sender, EventArgs e) 
    { 
     sender.Font = new Font(sender.Font, FontStyle.Bold); 
    } 
+1

'sender'を' object'から 'randomLabel'型にキャストする必要があります。 –

+0

'sender'は**' object' **です。オブジェクトには 'Font'プロパティがありません。それをコントロールとしてキャストする必要があります。 – stuartd

答えて

3

送信者を「調整」できますが、そのプロパティとメソッドにアクセスできるように、送信者を正しいタイプにキャストする必要があります。

private void RandomLabel_MouseEnter(object sender, EventArgs e) 
{ 
    var sender2 = sender as Label; 
    if (sender2 != null) 
     sender2.Font = new Font(sender2.Font, FontStyle.Bold); 
} 
0

senderFont性質を持っていないタイプobjectです。あなたはそれがいずれかを使用している期待senderが実際にタイプであることを確認するために

((Label)sender).Font = new Font(((Label)sender).Font, FontStyle.Bold); 

それはそう..です

それはラベルであると仮定すると、最初に適切な型にキャストするために良い選択を必要とするだろうしかし、手前のisまたはasオペレータ。万一の場合

1

senderを適切なコントロールにキャストする必要があります。例えば。

private void RandomLabel_MouseEnter(object sender, EventArgs e) 
{ 
    Control control = sender as Control; 
    if (sender != null) 
    { 
     control.Font = new Font(control.Font, FontStyle.Bold); 
    } 
    else 
    { 
     throw new InvalidArgumentException("sender"); 
    } 
} 
+2

物事を単純にしてください。 'Send 'を' Control'にキャストするだけです: '((Control)sender).Font'。ちなみに、 'is'はキャストが効率的ではありません。正しい方法は' as'で、ヌルチェックです(@ NightOwl888の答えを見てください)。 – Dennis

+0

@Dennis、良い点。更新しました。 – DiskJunky

関連する問題