winforms 数字键盘窗体弹出行为

xkrw2x1b  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(149)

你好,我有一个Windows窗体应用程序,在触摸屏上运行,它有文本框,用户输入数字。
当用户单击TextBox时,会弹出一个虚拟数字键盘。

private void textboxClicked(object sender, EventArgs e) // this code openes the numPad
{
    curTextBox = sender as TextBox;   // puts all the params in the curTextBox that i declared at the top of the class
    curTextBox.Text = null; // clears the textbox
    vnumPadForm.Location = PointToScreen(new Point(curTextBox.Right, curTextBox.Top));
    vnumPadForm.Show();
}

我遇到的问题是,当用户单击最右边的文本框时,数字键盘超出了屏幕,所以只显示了一半。
如果文本框和屏幕边缘之间的空间太小,数字键盘会在文本框的左侧弹出,我该怎么做呢?
我还没找到解决办法

z18hc3ub

z18hc3ub1#

假设vnumPadForm是一个Form,您可以计算它的宽度并测量它是否适合剩余的空间。
如注解中所述,您可以使用不同的方法计算窗口宽度,例如使用
Screen.PrimaryScreen.WorkingArea.Right

private void curTextBox_Click(object sender, EventArgs e)
{
    curTextBox = sender as TextBox;  
    curTextBox.Text = null;

    ShowNumPad(curTextBox.Right, curTextBox.Top, curTextBox.Left);
}

private void ShowNumPad(int right, int top, int left)
{
    var vnumPadForm = new vnumPadForm();
    vnumPadForm.WindowState = FormWindowState.Normal;
    vnumPadForm.StartPosition = FormStartPosition.Manual;

    // show at the top right corner
    vnumPadForm.Location = PointToScreen(new Point(right, top));

    if (right + vnumPadForm.Width > this.Width)
    {
        // not enough space, show at the left top corner
        right = left - vnumPadForm.Width;
        vnumPadForm.Location = PointToScreen(new Point(right,top));
    }

    vnumPadForm.BringToFront();
    vnumPadForm.Show();
}

请注意,我在方法中初始化了vnumPadForm,因为我不知道它在哪里初始化。需要使用WindowState和StartPosition来设置如下所述的位置:
Form.Location doesn't work
我使用了BringToFront,这对您的情况可能是可选的。

相关问题