为什么执行中的WinForm与其设计有如此不同?

时间:2015-05-20 22:05:56

标签: c# winforms

我有一个简单的WinForm,其唯一的功能是显示传递给它的消息。消息作为字符串传递并显示在文本框中。它设置为FixedToolWindow(无论我如何设置它,我最终得到相同的行为)。

通过以下方式调用表单:

PswCoordFailDisplay coord1 = new PswCoordFailDisplay(inputString);
coord1.Show();

这是两个截图:顶部是设计师;底部是如何实际绘制的。

Comparison Screenshots

这是一个相当复杂的应用程序的一部分,其中包含大约10个其他WinForms。他们都表现得像他们应该的那样,除了这个。

设计的变化是:

  • 表单的尺寸更改
  • 文本框会更改为占据表单的整个宽度(可能是为了响应填充表单的文本大小 - 尽管ScrollBars设置为Both
  • “关闭”按钮将其文本更改为“确定”并迁移到右下角
  • 表格的标题已消失
  • X-close不同
  • 当我将ControlBox转为False时,无论如何都会出现X-close,并采用与底部示例相同的形式

我几乎采用WinForm在创建WinForm时提供的所有默认值,除了一些不应该产生这种差异的项目。

究竟发生了什么?我的意思是,它仍然可以工作,但它不是设计所称的

1 个答案:

答案 0 :(得分:1)

如果您密切关注问题中显示的图片截图,您会注意到底部显示的是 MessageBox ,而不是预期的WinForm。正如评论员T McKeown和Grant Winney指出的那样,除非表格以这种方式编码,否则表格中的元素无法远离轨道。由于它没有以这种方式编码,因此不会调用预期的形式。当然,有一种非常肤浅的相似之处,这引起了我的困惑。

如果我已经展示了完整的呼叫代码,那么很快就能看到这一点:

switch (opRes.OpResult)
{
    case OperationResult.Result.Succeeded :
        MessageBox.Show("Password coordination succeeded.");
        LoadUser();
        break;
    case OperationResult.Result.PartialSuccess :
        MessageBox.Show(String.Format("Password coordination partially succeeded: {0}{1}", Environment.NewLine, opRes.Notation));
        LoadUser();
        break;
    default :
        MessageBox.Show("Password coordination failed.");
        PswCoordFailDisplay coord1 = new PswCoordFailDisplay(opRes.Notation);
        coord1.Show();
        break;
}

正如您可以清楚地看到的那样,取得了部分成功"控制权将传递到case语句中的第二个switch,而不是default。第二个case应该用新的WinForm编码,但我忘记了!所以你看到了问题:

在发布STACKOVERFLOW问题之前阅读您的远程代码!

这种方式不那么尴尬。

ETA:另外,如果我在我的问题中发布了上述代码,就像@Rockster建议的那样,有人会立即注意到它,也许会节省一两步。