2017-06-20 92 views
1

我有一個包含多個選項卡控件的選項卡控件。所有的選項卡控件都是使用winforms設計器創建的。嵌入式選項卡控件每個都有分配給它們的對象Chart。這些是程序運行後創建的,並且在每個排行榜中給出的三個事件:選項卡控件阻止鼠標滾動事件C#

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是選項卡控件內tab控件的tabpage。

編輯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

@Idle_Mind有趣。所以如果它只是表格上的圖表,我仍然無法滾動。我添加了一個'MouseEnter'事件處理程序來執行'test.Focus()',然後開始拾取滾動事件。 – Tim

+0

完美。你可以擴展Chart類並添加MouseEnter/Focus組合嗎?如果沒有,我們可以探索其他方式爲您的應用中的所有圖表製作「自動」。 –

回答

0

你可以連線了的MouseEnter()事件,並用一行代碼這樣給圖表焦點:

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