English 中文(简体)
改建和装修 离开小组的事件及其对儿童的控制
原标题:MouseEnter and MouseLeave events from a Panel and its child controls

我有一份载有儿童控制情况的<密码>。

如果我处理<条码>、<条码>、<条码>、<条码>、<条码>、<条码>、<条码>、条码>、条码<条码>、条码<条码>、条码>、条码<条码>、条码>、条码<>、条码>、条码>、条码>、徽章>、徽章>、徽章>条、徽章>条、徽章>条、徽章>条、徽章

Panel.MouseEnter
Panel.MouseLeave
Child1.MouseEnter
Child1.MouseLeave
Panel.MouseEnter
Panel.MouseLeave

但我需要以下顺序:

Panel.MouseEnter
Child1.MouseEnter
Child1.MouseLeave
Panel.MouseLeave

这是可能的吗?

问题回答

If you dont mind creating a usercontrol(derived from the panel or other parent container you wish), Override your parent s OnMouseLeave method to look like the following..

protected override void OnMouseLeave(EventArgs e)
{

    if(this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition)))
         return;
    else
    {
        base.OnMouseLeave(e);
    }
}

之后,活动将按规定顺序进行。

mo是小组进入儿童控制时的“跳板”,是它为什么会火上.。

可在小组网站<代码>上添加以下内容: MouseLeave 活动手稿:

// Check if really leaving the panel
if (Cursor.Position.X < Location.X ||
    Cursor.Position.Y < Location.Y ||
    Cursor.Position.X > Location.X + Width - 1 ||
    Cursor.Position.Y > Location.Y + Height - 1)
{
    // Do the panel mouse leave code
}

The solution is to track the number of enters/leaves. In you overall control add a counter:

private int mouseEnterCount = 0;

在MouseEnter手里这样做:

if (++mouseEnterCount == 1)
{
   // do whatever needs to be done when it first enters the control.
}

在MouseLeave手里这样做:

if (--mouseEnterCount == 0)
{
   // do whatever needs to be done when it finally leaves the control.
}

以及上述MouseEnter和MouseLeave活动操作员,负责控制所有儿童以及含有物品。

Matthew的回答并不总是奏效。 尤其是如果儿童控制被置于其集装箱的边缘,而且烟雾会偏离这方面的控制。 你们永远不会发现MouseLeave事件。

最好的办法就是建立一个用户控制集装箱,然后看看看所有儿童控制晚期和假肢事件,以便你能够适当发现何时和何时发生 mo事。 如果N进入了你的集装箱,你可以发射一次定制的MouseEnter活动,并离开MouseLeave活动。

吉米·塔是正确的。 如果没有(或小)环绕的父母控制(子)edge子和儿童控制,将会出现问题。

这就是我如何在用户分类类别中解决这一问题:

    public CSStackPanelItem()
    {
        InitializeComponent();

        MouseEnter += new EventHandler(CSStackPanelItem_MouseEnter);

        foreach (Control child in Controls)
        {
            child.MouseEnter += (s, e) => CSStackPanelItem_MouseEnter(s, e);
            child.MouseLeave += (s, e) => OnMouseLeave(e);
        }
    }

    protected override void OnMouseLeave(EventArgs e)
    {
        if (this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition)))
            return; //suppress mouse leave event handling

        if (m_bIsHover)
        {
            m_bIsHover = false;
            Invalidate(); //actually my mouse Enter/Leave event
        }

        base.OnMouseLeave(e);
    }

    void CSStackPanelItem_MouseEnter(object sender, EventArgs e)
    {
        m_bIsHover = true;
        Invalidate(); //actually my mouse Enter/Leave event
    }

这可能不是最可取的解决办法,但你可以在母子控制小组(子小组)上设定一个财产,即像“选择的毛”这样的保ool价值。 接着,小组火力的MouseEnter将其说成事实......当时,除非假造,否则会停止使用假逻辑。

实例

bool selected;

MouseEnter(..,..)
{
 if (!selected)
   selected = true;
 else
   selected = false;

  if (selected)
   /.. Logic Here ../
}

MouseLeave()
{
  if (selected)
   return;

/.. Logic Here ../
}

在现实中,我只想让儿童的MouseLeave事件确定参数。

Example:

Parent:
  bool doLeave;

  MouseLeave(..,..)
  {
    if (doLeave)
    {
     /.. Logic ../
     doLeave = false;
  }

Child:
 MouseLeave(..., ...)
  {
    DerivedPanel parent = this.Parent as DerivedPanel;
    if (parent != null)
      parent.doLeave = true;
  }

两者都不是立法者,但都将奏效。

我相信这一点。 核查您的温树应用的冰层工具会引发事件。

Windows.Forms Order of Events

http://missico.spaces.live.com/blog/cns!7D2C79BA0A7E3!186.enter/

这是一种骗局,难以可靠地编码。 一种想法是,在清单完成后,将“总结”名单上的3起事件,并在清单中完成3起预期事件之后,执行你想要的守则。 然后,当你重新执行任何法典(或也许抓住事件的 com子),你就可以把名单空出,并准备在下时刻完成特定星号。 不是理想,而是思想。

当然,这并没有克服潜在的解决问题与机会;可能错失事件 Hans made. 也许更符合条件。

检查儿童部分。

if (panel1.GetChildAtPoint(panel1.PointToClient(Cursor.Position)) == null)
{
    // mouse leave panel and children
}

我的办法是为小组和小组的上级形式设立一个<代码>MouseEnter的活动。 我不赞同任何<代码>MouseLeaving的活动。

当 cur子进入小组时,MouseEnter 火灾。 我可以访问所有小组的儿童控制,而没有发生(这是我想要的)。 当我离开小组时,母体为<代码>MouseEnter。

我正在寻找解决这一问题的办法,因此,我可以做一个小组,像一个纽州(当用户对面变化的颜色)。 我发现最简单的解决办法是把另一个小组置于基础小组(而且从总体上来说,它控制着)之上,使新的小组成为“协作者”的变性小组(大为“透明”的整批后财产及类型)。 然后,在新小组中增加MouseEnter和MouseLeave活动,使这些活动能够发挥你想要的一切作用(改变基小组的背景)。 用户仍然看到基调小组的所有控制,但基调小组的停用假和停用在用户移动控制时不会发生火灾。 用户可以与基地小组的控制进行互动,但为了对地标进行简单的控制,这一工程是科索沃的。 仅向新小组增加一个 mo点事件手。





相关问题
Bring window to foreground after Mutex fails

I was wondering if someone can tell me what would be the best way to bring my application to the foreground if a mutex was not able to be created for a new instance. E.g.: Application X is running ...

How to start WinForm app minimized to tray?

I ve successfully created an app that minimizes to the tray using a NotifyIcon. When the form is manually closed it is successfully hidden from the desktop, taskbar, and alt-tab. The problem occurs ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

Handle DataTable.DataRow cell change event

I have a DataTable that has several DataColumns and DataRow. Now i would like to handle an event when cell of this DataRow is changed. How to do this in c#?

Apparent Memory Leak in DataGridView

How do you force a DataGridView to release its reference to a bound DataSet? We have a rather large dataset being displayed in a DataGridView and noticed that resources were not being freed after the ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

WPF-XAML window in Winforms Application

I have a Winforms application coded in VS C# 2008 and want to insert a WPF window into the window pane of Winforms application. Could you explain me how this is done.

热门标签