C# WinCE开发,没有触摸屏,所以只能用键盘操作。
liseview控件,选定一列后按下enter按钮,然后弹出一个窗体。
就想完成上述的操作,可是在WinCE开发中liseview控件好像没有键盘事件,起码在窗体设计器里面没有,就是那个闪电图标里面。
请教各位了,到底要如何编写。
后来我查帮助(msdn)发现listview控件里面有一个保护函数OnKeyPress,不过后面写的是(从 Control 继承),因为本人是新手,所以有那位高手能帮助一下。

解决方案 »

  1.   

    各位大大,不要因为是ce的系统就不理我,其实ce和标准的window都一样。只不过支持的函数要少很多,但是只要是支持的,用法就一样。
      

  2.   

    OnKeyPress  这个就是接受按键的消息啊,
      

  3.   

    class MyListView : ListView
    {
      protected override void OnKeyPress(KeyPressEventArgs e)
      {
        // ...
      }
    }
      

  4.   

    wuyi8808(tm) studio   :) 
    这个必须继承ListView类吗?继承至一般的form类不行吗?
      

  5.   

    OnKeyPress不行,只能接收到窗体的按键,ListView的接收不到。重载ListView控件也不行(已尝试)安装Hook也不行,CE中好像没有句柄这个概念我帮你想了一个方法,或许比较笨,但也能达到你的要求
    private string ItemText = "";private void listView1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    foreach(ListViewItem lvItem in listView1.Items)
    {
    if(lvItem.Selected)
    {
    ItemText = lvItem.Text;
    lvItem.Focused = false;
    //这句比较关键,没有它listView不能失去焦点
    break;
    }
    }
    this.listView1.Enabled = false;
    this.Focus();
    this.listView1.Enabled = true; 
    }protected override void OnKeyPress(KeyPressEventArgs e)
    {
    if(e.KeyChar == (char)13)
    {
    if(ItemText != "")
    {
    MessageBox.Show(ItemText);
    }
    }
    base.OnKeyPress (e);
    }重要的地方是让listView失去焦点,但在selected_index里不能做到,只能用这种方法,
    也期待其他朋友有更好的方法
      

  6.   

    还有一个简单的问题,listView如何才能不显示columns。就是最上面的那一行列的说明,
      

  7.   

    在TextBox等控件中,用KeyPress中处理回车键的确非常方便,因为许多输入法都是通过回车来清除已有的编码,如果有KeyDonw或KeyUP,用户实际上只是用回车来清除已有的输入法编码,而不是真正回车,而KeyUP事件等同样收到了回车键,如果用KeyPress则不能收到,只有用户真正向文本框中按了回车才收到,这对响应用户按回车跳到下一控件等操作非常方便.