C# 文本框,用于在窗体打开时允许输入设置货币

C# 文本框,用于在窗体打开时允许输入设置货币,c#,input,textbox,C#,Input,Textbox,例如,字母G将选择英镑,字母U将选择美元等 我试图允许用户在表单打开时选择其货币,如下所示: private void Ccy_Click(object sender, EventArgs e) { baseCcy1.Visible = true; baseCcy1.Focus(); CcyForm c = new CcyForm((Button)sender, MousePosition.X, MousePosition.Y,

例如,字母G将选择英镑,字母U将选择美元等

我试图允许用户在表单打开时选择其货币,如下所示:

    private void Ccy_Click(object sender, EventArgs e)
    {
        baseCcy1.Visible = true;
        baseCcy1.Focus();

        CcyForm c = new CcyForm((Button)sender, MousePosition.X, MousePosition.Y, _Ccy);
        c.ShowDialog();

        setBuySellButtons();
    }
但是,文本框仅在表单关闭后聚焦。当CcyForm打开时,它不允许我在文本框中键入内容。我已经尝试了Task.delay的async/await方法,但是没有帮助。我不希望将文本框放在CcyForm中,而是希望它在窗体打开时可见,在窗体未打开时不可见


当CcyForm打开时,我如何允许用户在文本框中键入内容?提前谢谢

使用CcyForm.Show();而不是CcyForm.ShowDialog()

您应该调用
c.Show(this)。这将创建一个自有形式或无模式对话。这是一个表单,它将始终保持在调用方面前,但不会阻止对它的访问。拥有表单的一个示例是VS Find&Replace对话框

baseCcy1.Show();

var c = new CcyForm((Button)sender, MousePosition.X, MousePosition.Y, _Ccy);

c.Show(this);
Activate();
baseCcy1.Select();

正如文档中明确指出的,应用程序开发人员不应该对控件调用
Focus
,而应该调用
Select
。我已经解决了这个问题。如果将来有人对此有问题,请将代码放在KeyDown方法中,并使用switch/case方法将其修复。另外,将KeyPreview设置为true。感谢您的回复,但是这并没有解决问题:(那么您做得不对。如果您不准备深入了解“它不起作用”以外的任何细节)那么你就没有帮助自己了。在创建和显示表单之前,没有必要将焦点设置到
文本框
,因为表单在显示时会聚焦。在表单显示之后,你需要聚焦
文本框
。我想这是一个给定的设置,但从原始代码来看,可能不是。您还需要使包含
文本框的表单成为活动表单。请参见上面我的编辑中的代码示例。