1

このコードが機能しない理由を説明できる人はいますか?

 protected override void OnMouseDoubleClick(MouseEventArgs e)
        {
            if (this.BackColor == Color.White)
            {
                this.BackColor = Color.Yellow;

            }
            else
            {
                this.BackColor = Color.White;
            }
                base.OnMouseDoubleClick(e);
        }

数回は機能しましたが、ほとんど機能しません。「if」部分を削除すると毎回機能し、「this.BackColor = Color.Yellow」を他のコードに置き換えると機能します。私が間違っていることを教えてくれる人がいれば、とても感謝しています。

4

1 に答える 1

3

==オペレーターは ARGB プロパティだけでなく、色の Name プロパティと ARGB プロパティを比較するため、最初のダブルクリックでのみ機能しません (機能しますが、おそらく期待どおりに色を黄色ではなく白に設定します) 。最初のダブルクリックでは ARGB 値は同じですが(ARGB=(255, 255, 255, 255))、初期BackColorプロパティの名前は「Window」で、Color.White の Name プロパティの値は「White」であるため、名前は同じではありません。デバッガーで自分で確認できます。

この問題を回避するには、次のようにコードを書き直すことができます。

protected override void OnMouseDoubleClick(MouseEventArgs e)
{
      //compare ARGB values
      if (this.BackColor.ToArgb() == Color.White.ToArgb())
      {
           this.BackColor = Color.Yellow;

      }
      else
      {
           this.BackColor = Color.White;
      }
      base.OnMouseDoubleClick(e);
}
于 2013-03-19T01:21:56.463 に答える