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() イベントは発生しません。
なぜ、どうすれば修正できますか?