检测.net CF 3.5中状态栏控件上的点击

本文关键字:控件 状态栏 net CF 检测 | 更新日期: 2023-09-27 18:24:45

我正在使用Windows 6专业移动设备开发C#应用程序。当用户点击状态栏,然后显示一个列表框时,我想检测一个事件。.NET CF状态栏中除了"文本"已更改或父级已更改之外,没有按键按下或其他事件。我该如何处理这个问题?

谢谢,

检测.net CF 3.5中状态栏控件上的点击

我实际上还没有尝试过YMMV,但如果必须解决这个问题,我可能会尝试将父窗体子类化,并在StatusBar所在的区域中查找鼠标消息。MSDN杂志上有一篇文章介绍了在Compact Framework中对窗体进行子类化的方法,它应该能让你达到95%的效果。

在谈论软输入面板时,您必须添加对Microsoft.WindowsCE.Forms的引用,然后将输入面板控件放到表单上。

此处的C++示例代码:http://support.microsoft.com/kb/264034

基本上,只需连接Input Panel控件的唯一事件。不久前我做了这样的事情:

void SIP_EnabledChanged(object sender, EventArgs e) {
  int locationY = Y_START; // defined as txtNote.Location.Y when the form loads
  if (inputPanel1.Enabled) {
    locationY -= inputPanel1.Bounds.Height;
  }
  txtNote.SuspendLayout();
  txtNote.Bounds = new Rectangle(
    txtNote.Location.X,
    locationY,
    txtNote.Size.Width,
    txtNote.Size.Height
  );
  txtNote.ResumeLayout();
  txtNote.Refresh();
}

Control.Capture应该可以帮助您:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.capture%28v=vs.80%29.aspx

在窗体的构造函数中,将Capture属性设置为True:

this.Capture = true;

然后将鼠标事件处理程序添加到窗体中。例如:

// This method handles the mouse down event for all the controls on the form.  
// When a control has captured the mouse
// the control's name will be output on label1.
private void Control_MouseDown(System.Object sender, 
    System.Windows.Forms.MouseEventArgs e)
{
    Control control = (Control) sender;
    if (control.Capture)
    {
        label1.Text = control.Name+" has captured the mouse";
    }
}

即使子控件被点击,它也会被提升。