我有一个包含多个标签控件的标签控件。所有选项卡控件都是使用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");
}
在悬停,点击和滚动很多内容后,我只能输出b
和c
。由于某种原因,不会拾取滚动事件。我有一种感觉,这与在标签控件中有关。
为什么会发生这种情况?
编辑:
尝试了一个小规模的版本,同样的事情正在发生。
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();
}
}
它会起作用,即使它嵌入其他控件中。
答案 0 :(得分:0)
你可以连接MouseEnter()事件,并给图表焦点一个单行,如下所示:
test.MouseEnter += (s, evt) => { ((Control)s).Focus(); };