0

FlowLayoutPanel の右ボタンの MouseDown イベントと、対応する後続の MouseUpEvent の間の状態を追跡するブール値があります。

    bool TextBoxesRespondingToMouseMoveEvents = false;

... FlowLayoutPanel の MouseDown イベントと MouseUp イベントのコードと、FlowLayoutPanel のすべての TextBoxes が共有する共有 MouseHover ハンドラを次に示します。

    private void flowLayoutPanelGreatGooglyMooglyMain_MouseDown(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Right) {
            TextBoxesRespondingToMouseMoveEvents = true;
            //MessageBox.Show("TextBoxesRespondingToMouseMoveEvents is now true");
            selectionStart = PointToClient(MousePosition);
        }
    }

    private void flowLayoutPanelGreatGooglyMooglyMain_MouseUp(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Right) {
            TextBoxesRespondingToMouseMoveEvents = false;
            selectionEnd = PointToClient(MousePosition);
        }
    }

    // This event is shared by all of the buttons on flowLayoutPanelGreatGooglyMooglyMain
    private void textBoxQH1_MouseHover(object sender, EventArgs e) {
        if (TextBoxesRespondingToMouseMoveEvents) {
            TextBox tb = (TextBox)sender;
            if (tb.BackColor.Equals(SystemColors.Window)) {
                tb.BackColor = System.Drawing.Color.Gainsboro;
            }
        }
    }

これは、MouseDown イベントの MessageBox.Show() がコメントアウトされていない限り、またはそのイベントにブレークポイントがある場合に機能します。ただし、MessageBox.Show() をコメントアウトしてコードを実行しただけでは、MouseHover() イベントは発生しません。

なぜ、どうすれば修正できますか?

4

1 に答える 1

1

この質問の答えを見てください。MessageBox (またはブレークポイント) がない場合とある場合の動作の違いを直接説明していませんが、テキスト ボックスがマウス イベントを飲み込み、代わりに PreviewXXX イベントをフックする必要があることを説明し始めます。

于 2012-04-25T21:21:24.223 に答える