我正在使用网络表单,并在其上有一个带标签栏的表单。每个选项卡中都有多个文本框。我增加了选项卡索引,每个选项卡从1开始。如果用户点击表单的末尾并点击标签,我想从标签到标签。
我使用了离开方法并更改了标签控件的标签,唯一的问题是,如果我没有点击标签并说我点击该标签上的另一个控件,它仍然会拍到新标签页。
我认为解决这个问题的一种方法是收听标签键按下,如果关键按下是标签,请将表单更改为另一个标签,我似乎无法让它工作虽然。我尝试过使用keypress和keydown但是它们都不会将该选项卡作为键。如果我要说点击或点击开始键入它将触发事件但标签不会。
有什么建议吗?
我尝试了这些,这些事件都不会触发。
private void afsiTxtDaysForTempOEpriceOverrides_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 11)
{
afsiTxtDaysForTempOEpriceOverrides_Leave(sender, e);
}
}
private void afsiTxtDaysForTempOEpriceOverrides_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == "11")
{
afsiTxtDaysForTempOEpriceOverrides_Leave(sender, e);
}
}
private void afsiChkSalesBaseCostUpdate_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 11)
{
afsiChkSalesBaseCostUpdate_Leave(sender, e);
}
}
private void afsiChkSalesBaseCostUpdate_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == 11)
{
afsiChkSalesBaseCostUpdate_Leave(sender, e);
}
}
编辑:发现该页面正在使用Infragistics的UltraWinTabControl,所以这可能会导致标签出现一些问题。
答案 0 :(得分:1)
我最终需要覆盖ProcessCmdKey现在我面临一个新问题,这个问题有点相关但不是特别的,所以如果我得到答案,我会将其添加为评论。
private bool isTab = false;
private bool isShiftTab = false;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Tab)
{
isTab = true;
ShiftTab.Append("Tab");
}
else
{
isTab = false;
}
return base.ProcessCmdKey(ref msg, keyData);
}
答案 1 :(得分:0)
您需要将MultiLine属性设置为true,并且AcceptsTab也设置为true。
答案 2 :(得分:0)
或者使用e.KeyCode或e.KeyData,它对我有用
if (e.KeyCode == Keys.Tab | e.KeyData == Keys.Enter)