在我的 C# windows 窗体上,我有 3 个名为 textBuyPrice、textSell 和 textMargin 的文本框。用户可以输入买入价,如果他们输入卖出价,那么代码将为他们计算保证金。如果用户输入保证金,则代码将输入卖出价格。请参阅构成边际计算的这 2 位代码。
此代码捕获文本框中光标的输入并将当前值设置为变量。
private void textMargin_Enter(object sender, EventArgs e)
{
OriginalMarginValue = this.textMargin.Text;
}
此代码捕获文本框中的离开事件并进行任何更改,运行一些计算并更新任何相关字段。
private void textMargin_Leave(object sender, EventArgs e)
{
if (this.textMargin.Text != OriginalMarginValue)
{
Parts part = new Parts();
decimal dcmBuy = part.RemoveDollarSign(this.textBuyPrice.Text);
decimal dcmMargin = part.RemovePercentSign(this.textMargin.Text);
decimal dcmSell = part.GetSellPrice(dcmBuy, dcmMargin / 100);
string strSell = dcmSell.ToString("C");
this.textSellPrice.Text = strSell;
}
}
正在发生的事情似乎是 Enter 和 Leave 事件之间的循环。当我尝试跳出文本框时,离开事件触发后。Enter 事件再次触发,它不会让我退出。
到底是怎么回事?我应该强制选项卡将焦点设置在另一个字段上吗?
上面的代码与 textSellPrice 代码相同,我在该文本框中没有同样的问题。
谢谢
编辑 这是调用堆栈,因为代码在尝试离开文本框后第二次进入 Enter 事件:
AutoShop.exe!AutoShop.formPartDetail.textMargin_Enter(object sender = {Text = "57.14 %"}, System.EventArgs e = {System.EventArgs}) 第 168 行 C# System.Windows.Forms.dll!System.Windows.Forms。 Control.OnEnter(System.EventArgs e) + 0x88 字节
System.Windows.Forms.dll!System.Windows.Forms.Control.NotifyEnter() + 0x1f 字节
System.Windows.Forms.dll!System.Windows.Forms.ContainerControl。 UpdateFocusedControl() + 0x195 字节 System.Windows.Forms.dll!System.Windows.Forms.ContainerControl.AssignActiveControlInternal(System.Windows.Forms.Control 值 = {Text = "57.14 %"}) + 0x60 字节
System.Windows.Forms .dll!System.Windows.Forms.ContainerControl.ActivateControlInternal(System.Windows.Forms.Control control, bool originator = false) + 0x48 bytes
System.Windows.Forms.dll!System.Windows.Forms.ContainerControl.SetActiveControlInternal(System.Windows.Forms.Control value = {Text = "57.14 %"}) + 0x73 bytes
System.Windows.Forms.dll!System.Windows .Forms.ContainerControl.ValidateThroughAncestor(System.Windows.Forms.Control originalControl, bool preventFocusChangeOnError) + 0x212 字节
System.Windows.Forms.dll!System.Windows.Forms.ContainerControl.EnterValidation(System.Windows.Forms.Control enterControl) + 0x7c 字节
System.Windows.Forms.dll!System.Windows.Forms.ContainerControl.UpdateFocusedControl() + 0x8a 字节
System.Windows.Forms.dll!System.Windows.Forms.ContainerControl.AssignActiveControlInternal(System.Windows.Forms.Control 值= {文本 = ""}) + 0x60 字节
System.Windows.Forms.dll!System.Windows.Forms.ContainerControl.ActivateControlInternal(System.Windows.Forms.Control control, bool originator = false) + 0x48 bytes
System.Windows.Forms.dll!System.Windows.Forms.ContainerControl .SetActiveControlInternal(System.Windows.Forms.Control value = {Text = ""}) + 0x73 字节
System.Windows.Forms.dll!System.Windows.Forms.ContainerControl.SetActiveControl(System.Windows.Forms.Control ctl) + 0x33 字节
System.Windows.Forms.dll!System.Windows.Forms.ContainerControl.ActiveControl.set(System.Windows.Forms.Control 值) + 0x5 字节
System.Windows.Forms.dll!System.Windows.Forms.Control。选择(布尔定向,布尔转发)+ 0x1b 字节
System.Windows.Forms.dll!System.Windows.Forms.Control.SelectNextControl(System.Windows.Forms.Control ctl, bool forward, bool tabStopOnly, bool nested, bool wrap) + 0x7e 字节
System.Windows.Forms.dll! System.Windows.Forms.Form.ProcessTabKey(bool forward = true) + 0x24 字节
System.Windows.Forms.dll!System.Windows.Forms.ContainerControl.ProcessDialogKey(System.Windows.Forms.Keys keyData = LButton | Back) + 0x71 字节