感谢各位,现在已经ok了,用Api似乎比较通用点,不用考虑是不是有COMBOBOX1.DRAPDROPED=TRUE类似的属性, Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Boolean, ByVal lParam As String) As Integer Const CB_SHOWDROPDOWN = &H14F Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, True, 0) End Sub
buuton.click += comboBox_Click(object sender, system.event.args e);
comboBox.click += comboBox_Click(object sender, system.event.args e);
buuton.click += comboBox_Click(object sender, system.event.args e);
你这样做可以吗?能举个详细点的例子吗
1、在form初始化时给他的enter事件分配给click
2、在触发enter按键时调用click事件
2、在触发enter按键时调用click事件
to lingfeng_314(凌风) 可怎么调用click事件呢?RaiseEvent不能调用控件的基类事件,关于说的ComboBox1_SelectedIndexChanged(Nothing,Nothing)
可不能引发控件自己的处理过程,比如说ComboBox1_dragdrop(nothing,nothing)可不能产生下拉菜单的效果,用反射取得控件事件的委托后再调用委托方法的invoke?invoke参数又是什么呢?疑惑中!
private void comboBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if(e.KeyChar == 13) //如果是回车键
{
SendKeys.Send("%({DOWN})"); //Alt + 下拉键头
}
}事件这东西被造出来时的目的之一就是防止一个类里定义的事件被类之外的东西随意触发,所以event后,在该类之外只能进行+=,-=操作,即订阅和取消订阅,而不能触发它。没有声明event关键字的delegate就没有这种限制啦。想想,事件这东西用delegate就完全可以实现,为啥后来又造了个event,就会明白它的用意了。event保证了事件订阅者的事件处理代码,如EventHandler(object sender, EventArgs e);时的sender肯定就是那个触发事件的对象,而不是会哪个莫名其妙的其它对象触发的。
{
this.comboBox_Click(new object(),new System.EventArgs());
}
{
if(e.KeyChar == 13) //如果是回车键
{
SendKeys.Send("%({DOWN})"); //Alt + 下拉键头
}
}代码看起来很有道理,但不知道namhyuk(namhyuk) 测试过没有,这段代码并不能激发下拉菜单事件,先找本API的书看看(此方法也不是很通用)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Boolean, ByVal lParam As String) As Integer Const CB_SHOWDROPDOWN = &H14F Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, True, 0)
End Sub