Tab Control阻止鼠标滚动事件C#

时间:2017-06-20 17:59:49

标签: c# winforms

我有一个包含多个标签控件的标签控件。所有选项卡控件都是使用winforms设计器完成的。嵌入式选项卡控件每个都分配了Chart个对象。这些是在程序运行后创建的,每个图表都有三个事件:

chart.MouseWheel += new MouseEventHandler((sender, e) => this.Chart_MouseWheel(sender, e, chart, raw, condensed, bounds));
chart.MouseHover += new EventHandler(Chart_Hover);
chart.MouseClick += new MouseEventHandler((sender, e) => this.Chart_Click(sender, e, chart));

为了便于调试,我在每个方法中添加了一个简单的Console.WriteLine();,以查看实际被触发的方法。

private void Chart_MouseWheel(object sender, MouseEventArgs e, Chart chart, DataTable raw, DataCondenser condensed, List<double> bounds)
{
    Console.WriteLine("a");
}

private void Chart_Hover(object sender, EventArgs e)
{
    Console.WriteLine("b");
} 

private void Chart_Click(object sender, MouseEventArgs e, Chart chart)
{
    Console.WriteLine("c");
}

在悬停,点击和滚动很多内容后,我只能输出bc。由于某种原因,不会拾取滚动事件。我有一种感觉,这与在标签控件中有关。

为什么会发生这种情况?

编辑:

尝试了一个小规模的版本,同样的事情正在发生。

 public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Chart test = new Chart();
        test.Width = 500;
        test.Height = 500;


        test.MouseWheel += new MouseEventHandler(Chart_Scroll);
        test.MouseHover += new EventHandler(Chart_Hover); //mousehover event for the tooltip to activate
        test.MouseClick += new MouseEventHandler(Chart_Click);

        tabPage3.Controls.Add(test);
    }

    private void Chart_Scroll(object sender, MouseEventArgs e)
    {
        Console.WriteLine("a");
    }

    private void Chart_Hover(object sender, EventArgs e)
    {
        Console.WriteLine("b");
    }

    private void Chart_Click(object sender, MouseEventArgs e)
    {
        Console.WriteLine("c");
    }

发生了同样的问题。 tabPage3是制表符控件中tabcontrol的标签页。

编辑2:

所以如果我给图表这个事件处理程序:

test.MouseEnter += new EventHandler(mouseEnter);

使用方法:

private void mouseEnter(object sender, EventArgs e)
{
    this.Focus();
}

它仍然无法运作。但是,如果我使用它:

private void mouseEnter(object sender, EventArgs e)
{
    if (sender is Chart)
    {
        Chart temp = (Chart) sender;
        temp.Focus();
    }
}

它会起作用,即使它嵌入其他控件中。

1 个答案:

答案 0 :(得分:0)

你可以连接MouseEnter()事件,并给图表焦点一个单行,如下所示:

test.MouseEnter += (s, evt) => { ((Control)s).Focus(); };