2011-11-22 46 views
0

是否有可能以編程方式在ListView上觸發DoubleClick事件?無需知道事件處理程序的位置/簽名?在C#中ListView上的Fire DoubleClick事件#

+2

爲什麼你需要這樣做? – Reniuz

+0

爲什麼你不直接調用該方法呢?我不確定在哪種情況下,這可能是一個好的想法或真正的需要。 – ykatchou

+1

聽起來像是一種非常間接的執行邏輯的方式。爲什麼不直接調用listview被點擊時發生的事情? –

回答

1

我的博客上講述的是前一陣子:Simulate a Click;它不是真正的點擊,但會觸發事件處理程序。博客說「OnClick」,將其替換爲「OnDoubleClick」,你應該沒問題。

2

如果我明白你想要什麼,而不是這樣做:

private void MouseDoubleClick(object sender, EventArgs e) 
{ 
    //some code on mouse double click 
} 

化妝:

private void MethodToExecuteOnDoubleClick() 
{ 
    //some code on mouse double click 
} 

private void MouseDoubleClick(object sender, EventArgs e) 
{ 
    MethodToExecuteOnDoubleClick(); 
} 

,然後你可以調用MethodToExecuteOnDoubleClick(),只要你想,而不需要上升雙擊事件

0

最好創建一個封裝控件並處理那裏可能需要的任何邏輯。

1

對於模擬鼠標點擊,你可以做這樣的事情:

using System; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

    //.... 

    [DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] 
    public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo); 

    private const int MOUSEEVENTF_LEFTDOWN = 0x02; 
    private const int MOUSEEVENTF_LEFTUP = 0x04; 
    private const int MOUSEEVENTF_RIGHTDOWN = 0x08; 
    private const int MOUSEEVENTF_RIGHTUP = 0x10; 


    public void DoMouseClick() 
    { 
     //Call the imported function with the cursor's current position 
     int X = Cursor.Position.X; 
     int Y = Cursor.Position.Y; 
     mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0); 
    } 

    //... 
} 
相關問題