求助关于弹出窗体覆盖到textbox,自动移开

qq_21420725 2021-04-07 04:08:49
当textbox 发生enter事件的时候,会自动弹出一个子窗体。
如下图

正常情况下,这个子窗体是不会覆盖到textbox的。
当时如果手动移动子窗体覆盖textbox。
如下图,子窗体把textbox给覆盖了。


求助,当手动移动子窗体覆盖textbox时,希望子窗体会自动跳到左上角,
如何实现
...全文
201 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
morliz子轩 2021-04-09
  • 打赏
  • 举报
回复

//窗体位置在屏幕中间
form1.StartPosition = FormStartPosition.CenterScreen;
//窗体在其父窗口中间
form1.StartPosition = FormStartPosition.CenterParent;
//窗体在有其空间的Location属性而定
form1.StartPosition = FormStartPosition.Manual;
//窗体位置由Windows默认位置决定,窗体大小也是Windows默认大小
form1.StartPosition =FormStartPosition.WindowsDefaultBounds;
//窗体位置是Windows默认,大小在窗体大小中确定
form1.StartPosition =FormStartPosition.WindowsDefaultLocation

//获取屏幕宽度
int width=SystemInformation.VirtualScreen.Width;
//获取屏幕高度
int height = SystemInformation.VirtualScreen.Height;

那左上角的位置,就是Location(0,0)了。实际就是两句代码:

this.StartPosition = FormStartPosition.Manual;
    this.Location = new Point(0, 0);
hwangt0 2021-04-08
  • 打赏
  • 举报
回复
响应子窗体的LocationChanged事件,然后比较子窗体相对屏幕的位置与textbox相对屏幕的位置,如果满足覆盖条件,就把子窗体的位置重置为0,0。
enaking 2021-04-07
  • 打赏
  • 举报
回复
你是想写一个下拉控件吧,我们也写过,但不是用的窗体。直接Contrls.Add(userContrl)然后调整userContrl的位置。
Bridge_go 2021-04-07
  • 打赏
  • 举报
回复
private void _form2_LocationChanged(object sender, EventArgs e)
{
    Point p = this.textBox1.PointToClient(_form2.PointToScreen(new Point(0, 0)));
    int x = p.X - 8;
    int y = p.Y - 28;
    bool b1 = x < this.textBox1.Width && x > -_form2.Width;
    bool b2 = y < this.textBox1.Height && y > -_form2.Height;
    if (b1 && b2)
    {
        _form2.Location = new Point(0, 0);
    }
}

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧