我正在尝试以下代码:
public Form1()
{
InitializeComponent();
this.MouseWheel += new MouseEventHandler(Form1_MouseWheel);
}
private void Form1_MouseWheel(object sender, MouseEventArgs e)
{
textBox1.Text += "delta : " + e.Delta + "\r\n";
}
但事件似乎永远不会发生。然后我注意到文本框在表单显示后立即获得焦点,事实上,在我删除它之后,事件开始工作。
现在,问题:
答案 0 :(得分:0)
将Form1_MouseWheel添加到表单和文本框(或者可能只是文本框) 在此代码中,彼此之后一秒钟内的所有鼠标滚轮运动都属于同一系列。
public partial class Form1 : Form
{
private Timer second = new Timer();
private int wheelMoves = 0;
public Form1()
{
second.Interval = 1000;
second.Tick += new EventHandler(second_Tick);
InitializeComponent();
}
void second_Tick(object sender, EventArgs e)
{
second.Stop();
// DoStuff with wheelmoves.
textBox1.Text = wheelMoves.ToString() + " " + (wheelMoves * wheelMoves).ToString();
wheelMoves = 0;
}
void Form1_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
// reset the timer.
second.Stop();
second.Start();
// Count the number of times the wheel moved.
wheelMoves++;
}
}
编辑:如果您添加另一个控件并使其获得焦点,则无需将事件处理程序添加到文本框中。这使文本框滚动功能保持不变,并且还调用自定义MouseWheel事件。
答案 1 :(得分:0)
这里最可能的是文本框自动窃取焦点,因为操作系统可能会自动假设任何鼠标滚轮都指向它(因为它是唯一可用的文本编辑控件)。
可能的解决方案:
SetStyle
强制创建永远无法获得焦点的文本框,如下所示:class unfocusableTextBox : TextBox { public unfocusableTextBox(){ SetStyle(ControlStyles.Selectable, false); } }