Winforms App在设计模式下不显示图形元素

时间:2010-06-02 06:36:14

标签: c# .net

我在c#的.cs文件中为winforms应用程序编写了一堆代码。应用程序运行正常,一切都在它的位置。

这样的事情:

using..

namespace Temp
{
  public class Temp : Form
  {
    Button b1;
    TextBox t1;

    Temp()
    {
       b1.Text = "Some Text";
       b1.Size = new Size(50,20);
       ...
    }

    void function1()
    {
       // stuff
    }

    static void Main()
    {
       Application.Run(new Temp());
    }
  }
}

如何修改我的代码(或以某种方式修复它),以便设计视图在正确的位置和视图中显示元素,以便我可以直观地编辑它们,而不必试用/错误一切。

编辑澄清

我的应用运行正常。问题是,我没有使用设计器来创建应用程序,所以在设计器视图中,应用程序是空的。但是当我运行它时不是空的,因为所有内容都以编程方式放在.cs文件中。我的问题是,如何解决这个问题,以便设计师正确显示对象。

除了重新设计所有东西之外没有快速解决方法吗?

4 个答案:

答案 0 :(得分:3)

因此,要在设计师中展示这一点,您必须了解设计师的工作方式。

对于每个MyForm.cs,都会自动创建一个名为MyForm.Designer.cs的文件。在此Designer文件中,只有一个名为InitializeComponents()的函数。此函数将在MyForm.cs文件的构造函数中调用。

设计查看器本身负责Designer文件,因此在设计视图打开时对该文件的任何更改通常都会被丢弃。此外,如果您将一些代码放入不需要的设计器文件中,设计器将被截断。

接下来的问题是,这种截断何时发生?当您刚刚打开表单的设计查看器时,它将从Designer.cs文件读取所有内容而不进行任何更改。如果您对设计师对表单进行任何更改,则将使用已读入的所有设置(包括您的最新更改)重写完整文件。

如果您将设计器文件也作为源代码视图打开,可以监视此行为,在设计模式中进行一些小的更改,然后仔细查看源文件的左侧。将会有标有黄色或绿色标记的更改。

现在,在完成所有这些信息后,您可以尝试以下过程将代码放入设计器中:

  • 打开设计视图并将一些简单的控件放在表单上(例如TextBox)
  • 保存并关闭设计视图,并将Designer.cs文件作为源文件打开
  • 将所有变量名称复制到文件末尾的textBox1
  • 下方
  • 将所有控件属性设置复制到TextBox属性设置正下方的InitializeComponent()函数中
  • 将所有控件构造函数复制到文件顶部,位于TextBox
  • 的构造函数正下方
  • 保存文件并在设计视图中打开表单
  • 在设计视图中选择虚拟TextBox并将其删除
    • DesignView中的这一更改导致完全重写designer.cs文件,以正确的方式订购所有手动添加的内容。

所以这是要走的路。最后但并非最不重要的另一个小技巧:
每个程序员都使用using语句来不写每个类的整个路径(如System.Windows.Forms.TextBox),但设计者总是写出整个路径。为了使复制和粘贴会话更容易,您还可以在文件顶部添加using语句。在设计视图中保存和更改内容后,所有这些内容都将自动重写。因此,在将内容添加到Designer.cs文件时,不需要手动添加所有这些路径。

答案 1 :(得分:0)


在这种情况下,您需要将设计器代码从CS复制到designer.cs。这样你就可以使用设计师了。我认为这是最简单的方法。

答案 2 :(得分:0)

您最好的选择可能是使用设计器中的属性面板来设置位置等(或者只是拖动它们?)。

可以在设计器文件中搜索表单(something.Designer.cs),但这不是一个奇妙的想法,因为它可能对改变事物的方式非常敏感设计师没想到。话虽如此,看起来你实际上并没有使用设计师制作你的表格(一类是partial),在这种情况下你是SOL。

答案 3 :(得分:0)

在您创建新的winform时,看起来这个文件是从类文件中被黑客攻击而不是由系统生成的。

至少需要一个InitializeComponent();在你的构造函数中调用。但是,在创建文件(例如Dispose())时,您缺少许多为您生成的其他代码。

最好的办法是在解决方案资源管理器中右键单击您的项目,然后单击“添加Windows窗体”,然后重新开始。