7

マウスがアプリケーションフォームの1つにあるときに、カーソルを非表示にする方法についてサポートが必要です。コードは、MouseEnterイベントとMouseLeaveイベントのそれぞれのCursor.Hide()とCursor.Show()であることを知っています。これをフォーム自体に適用しても機能しません。そこで、他のコントロールを含むパネルを挿入しました(DockプロパティをFillに設定しました)。コードはパネルで機能しましたが、コントロールを追加し始めたときは機能しませんでした。
私の推測では、各コントロールにコードを適用する必要があります。私のフォームに約25のコントロールがあるので、それはかなり不器用に思えます。
私の考えはこれでした(フォーマットして申し訳ありません;私はこれをダムフォンから入力しています):

foreach(Control control in this.Controls)
{
    control.MouseEnter += control_MouseEnter;
    control.MouseLeave += control_MouseLeave;
}

コードはFrmScreen_Load内にありました。しかし、それでも機能しません。私は何かが足りないのですか?

私はC#で作業していますが、VB.NETのソリューションは受け入れられます。

4

2 に答える 2

7

Cursor.Hide();フォーム コンストラクターで使用することをお勧めします。

これをフォーム自体に適用しても機能しません

アプリケーションの領域外に移動するときにカーソルを気にする必要はないと思います。フォームが初期化されるまさにそのときにコードがそこに置かれます。

public Form1()
        {    
            InitializeComponent();
            Cursor.Hide();
        }

もう 1 つの推奨される方法は、コントロール コレクションを反復処理することです。

foreach(Control c in this.Controls)
{
  c.Cursor.Hide();
}
于 2012-08-20T14:37:57.260 に答える
0

あなたはこれを言いました: @msarchet 問題は、マウスがコントロール上にあるときに、control_MouseEnter (カーソルを非表示にする) がループで呼び出されることだと思いますが、その直前に、マウスはカーソルを表示する別のコントロールを離れました。 . 全体として、カーソルが常に表示されているように見えるように、2 つのイベントが同時に呼び出されている可能性があります。ちょうど私が思う

それが問題だと思われる場合は、すべてのコントロールを終了するために cursor.show を実行しないでください。パネルを終了するときにのみ表示する必要があります。パネルにcursor.showとcursor.hideを設定すると、他のすべてのコントロールはcursor.hideを取得します。

于 2012-08-20T15:03:19.240 に答える