C# A窗口里显示B窗口

zengwenjian 2014-03-27 10:21:34
我在A窗口里面ShowDialog()的方式显示B窗口,然后按OK Button 后 我想检查 B窗口输入的正确才继续执行关闭窗口,但是我检查输入有问题时直接Return ,但是 B窗口还是消失了(Task.ShowDialog()= DialogResult.OK),导致我会继续往下执行。

Form Task = new groupInsertForm();
if (Task.ShowDialog() == DialogResult.OK)
{

}

我想到有2个解决的方法但是好像都不大好:
1. 在B窗口设置一个假的确定按钮,点击后判断输入是否正确, 如果正确发送 OK Button 被点击的命令,不正确直接返回就是了。
2. 通过设置全局变量判定是否输入错误,如果输入错误再次调用Task.ShowDialog()。

请大家告诉我一些比较靠谱的方式,我感觉说的比较乱,不知道说清楚没有
...全文
258 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengwenjian 2014-03-28
  • 打赏
  • 举报
回复
各位大神你们太牛了。 还是C#版块好,提问通常都能有一个很好的解决方案,C++版块经常没人甩。 谢谢你们了! 总结一下,给后面的遇到问题的人: 个人觉得1楼、5楼、7楼,提到的方式比较好,呵呵,我刚开始是用2楼那种的(1楼写很简炼可惜我开始没反应过来)。
wepwep 2014-03-28
  • 打赏
  • 举报
回复
注意子窗口的AcceptButton和CancelButton属性,如果有则去掉,我吃过大亏啊。
dianjixue1 2014-03-27
  • 打赏
  • 举报
回复
不是很明白楼主的意思。你的验证是在B窗口执行的吗? 如果是在B窗口执行,点击“OK”按钮关不关闭窗口不是自己说了算吗? 在模式化窗口中,只要给this.DialogResult赋值,不论赋的是什么值,都会触发关闭窗口命令。不想关闭窗口,不赋值不就是了吗? 在B窗口中

private void btnOK_Click(object sender, EventArgs e)
        {
            if (验证通过)
            {
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                //this.Close();  //这个指令不写也会触发
            }
        }

不给this.DialogResult 赋值,不会关闭B窗口的
zengwenjian 2014-03-27
  • 打赏
  • 举报
回复
哦,看来都是判断返回值没有登录成功,就重新再新建一个窗口让用户录入登录信息。
hard_learner 2014-03-27
  • 打赏
  • 举报
回复
请参考下面代码,这个代码实现的功能是如果账号密码输入不正确并且不取消登录的话则会一直提示输入用户名密码,只有输入正确之后才会进行下面的操作 这个相当于A窗体的按钮方法

var frm = new FrmLogin();
                var result = DialogResult.Cancel;

                do
                {
                    frm.Focus();
                    result = frm.ShowDialog();

                    if (result == DialogResult.Cancel)
                    {
                        Application.Exit();
                        return;
                    }
                }
                while (result != DialogResult.Yes);
                Application.Run(new FrmMain());
下面是登录窗体相当于B

try
            {
                Common.HttpHelper.HomePage(Common.CurrentUser.Cookie);
                var result = Common.HttpHelper.Login(Common.CurrentUser.Cookie, this.txtUserName.Text.Trim(), this.txtPassword.Text.Trim());
                if (result.IndexOf(Properties.Resources.LoginSuccess) > 0)
                {//如果登陆成功
                    this.DialogResult = DialogResult.Yes;
                }
                else if (result.IndexOf(Properties.Resources.LoginFail) > 0)
                {//如果登陆失败
                    King.DevWinForm.KingMessageBox.ShowMessage("账号或密码错误!");
                    this.DialogResult = DialogResult.No;
                }
                else
                {
                    King.DevWinForm.KingMessageBox.ShowWarning("返回的数据格式不正确,请重新跟踪系统看返回数据格式是否发生了变化");
                }
            }
            catch (Exception ex)
            {
                King.DevWinForm.KingMessageBox.ShowError(ex.Message);
            }
feiyun0112 2014-03-27
  • 打赏
  • 举报
回复
在formclosing事件判断检查输入,如果有问题就e.cancel=true;

*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
dare_ 2014-03-27
  • 打赏
  • 举报
回复
点击 ok是不会close弹出窗的吧
lele_nancy 2014-03-27
  • 打赏
  • 举报
回复
e.cancel=false;
zengwenjian 2014-03-27
  • 打赏
  • 举报
回复
引用 5 楼 sunyaxingqq 的回复:
在B窗口的formclosing事件判断检查输入是不是正确就可以了。正确就关闭,不正确就取消关闭啊。
怎样可以取消关闭啊?
sunyaxingqq 2014-03-27
  • 打赏
  • 举报
回复
在B窗口的formclosing事件判断检查输入是不是正确就可以了。正确就关闭,不正确就取消关闭啊。

110,538

社区成员

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

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

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