4

だから私はブログ・オ・スフィアでこれについて多くの話を見てきた.

あなたが持っているTreeViewとしましょうCheckBoxes...

Double-clickCheckBoxの1 つをオンにしてNodes、もう一度ボックスをクリックします... 状態が適切に変化していないように見えることに気付くでしょう。

これはbug?? 私は常に「バグ」を見つけたと言うことに慎重です.NET...

4

2 に答える 2

5

問題を再現すると、これは間違いなくバグ* (意図的なアスタリスク) であることがわかります。TreeView でチェックされていないチェック ボックスをダブルクリックすると、次のようなコードが呼び出されるためです。

For Each node As TreeNode In Me.TreeView1.Nodes
    Console.WriteLine("{0}: {1}", node.Name, node.Checked)
Next

視覚的にはチェックされていませんが、ノードはまだチェックされていると認識しています。私はいくつかのことが起こっているのを見ることができます:

  1. AfterCheck イベントは、チェックボックスのダブルクリック中に 1 回呼び出されます。
  2. チェックされていないノードのチェックボックスから始めてダブルクリックすると、ノードがまだチェックされていると見なされることがわかります (上記のとおり)。これは、次にクリックしてもチェックボックスがオンにならない理由も説明しています。これは、チェックされていると考えており、checked プロパティを false に設定しているためです。これは UI を変更していません。その後の次のクリックでは、期待どおりにチェックされた状態に戻ります。
  3. チェックボックスが実際にどういうわけかフォーカスされているようです。ツリーノードをダブルクリックしてからフォームのボタンをクリックすると、2 回クリックする必要があります。1 つ目は、チェックボックスと思われるものに焦点を当てることです。次に、実際にボタンをクリックします。

私の結論は、どういうわけか、ダブルクリックするとチェックボックスがフォーカスされ、2回目のマウスクリックがツリーノードに送信されずにチェックボックスに送信されるため、チェックボックスがオフになり、ツリーノードが何もないということです。賢い。

これはあってはならない動作であり、分類の仕方はマイクロソフトに任せます。

于 2012-12-13T23:37:16.083 に答える