0

アプリケーションのコンボ ボックスで、コントロールがバインドされているコレクションをユーザーが編集できるようにしたいと考えています。これを行うには、カーソルがコントロール上にあるときに表示されるボタンが必要です。そこで、コンボ ボックスとボタンを備えたユーザー コントロールを作成しました。ただし、適切なタイミングでボタンを表示するのに問題があります。これが私のコードです:

public partial class CollectionDropDown : UserControl
    {
        public CollectionDropDown()
        {
            InitializeComponent();
            SetEventsRecursively(Controls);
        }

        public void SetEventsRecursively(ControlCollection controls)
        {
            foreach (Control ctrl in controls)
            {
                ctrl.MouseLeave += new EventHandler(ctrl_MouseLeave);
                ctrl.MouseEnter += new EventHandler(ctrl_MouseEnter);
                SetEventsRecursively(ctrl.Controls);
            }
        }

        void ctrl_MouseEnter(object sender, EventArgs e)
        {
            button1.Visible = true;
        }

        void ctrl_MouseLeave(object sender, EventArgs e)
        {
            button1.Visible = false;
        }
    }

したがって、すべてのコントロールに同じマウスの出入りがあるので、マウスがコントロール全体に入るとボタンが表示され、離れると非表示になるという考えでした。問題は、入る前にマウスを離すイベントが発生することです。したがって、マウスをコントロールに移動すると、ボタンが表示されます。しかし、ボタンに移動しようとすると、カーソルが上にあったコントロールが何であれ、マウスが離れてしまい、ボタンを「入力」する前にボタンが見えなくなります。何かご意見は?

4

2 に答える 2

0

emd の提案を使用して、マウスを離すイベントでマウスがコントロールの境界内にあるかどうかを確認しました。

if (!this.RectangleToScreen(ClientRectangle).Contains(Cursor.Position))
                button1.Visible = false;

それは私が望んでいた結果を生み出しました。

于 2013-05-20T19:30:29.107 に答える