none
关于在窗体构造函数中设置控件属性导致程序不运行的问题 RRS feed

  • 问题

  • 通过给main增加参数,设置窗体的某些属性,结果给exe后附加参数后程序不运行,代码如下:

     

    form1.cs中:

     public Form1()
            {
                InitializeComponent();
               
            }
            public Form1(string n)
            {
                if (n == "1")
                {
                    this.button1.Visible = true;
                }
                else if (n == "0")
                {
                    this.button1.Visible = false;
                }

                InitializeComponent();
            }

     

    Program.cs中:

      static bool bCreatedNew;

            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                Mutex m = new Mutex(false, "Ken_WcfForm", out bCreatedNew);

                if (bCreatedNew)
                {
                    if (args.Length<=0)               
                        Application.Run(new Form1());             
                    else
                        Application.Run(new Form1(args[0]));
                   
                }
            }

     

    创建快捷方式,在可执行文件后添加参数:mypro.exe 0 结果运行该快捷方式,程序好像运行了一下,但是没有出来,看进程也没有,请问是怎么回事?

    2011年7月26日 9:29

答案

  •  在构造函数中,把初始化控件方法InitializeComponent()放在前面

    public Form1(string n)
        {
    
        InitializeComponent();
           if (n == "1")
          {
            this.button1.Visible = true;
          }
          else if (n == "0")
          {
            this.button1.Visible = false;
          }
    
      }
    
    

     


    http://blog.csdn.net/zx13525079024
    • 已标记为答案 Ken767 2011年7月27日 2:09
    2011年7月26日 10:16
  • Dear

    看起来您是要用检查软体有无重复运行,若是的话可参考以下范例

    http://www.dotblogs.com.tw/yc421206/archive/2009/08/08/9948.aspx

     

    再者,应该是执行InitializeComponent后再写判断,建构子初始化可参考以下

     

        public Form1():this(null)
        {
        }
        public Form1(string Name)
        {
          InitializeComponent();
          if (!string.IsNullOrEmpty(Name))
          {
            switch (Name)
            {
              case "0":
                //TODO
                break;
              case "1":
                //TODO
                break;
            }
          }
        }



    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    • 已标记为答案 Ken767 2011年7月27日 2:09
    2011年7月26日 18:17

全部回复

  •  在构造函数中,把初始化控件方法InitializeComponent()放在前面

    public Form1(string n)
        {
    
        InitializeComponent();
           if (n == "1")
          {
            this.button1.Visible = true;
          }
          else if (n == "0")
          {
            this.button1.Visible = false;
          }
    
      }
    
    

     


    http://blog.csdn.net/zx13525079024
    • 已标记为答案 Ken767 2011年7月27日 2:09
    2011年7月26日 10:16
  • Dear

    看起来您是要用检查软体有无重复运行,若是的话可参考以下范例

    http://www.dotblogs.com.tw/yc421206/archive/2009/08/08/9948.aspx

     

    再者,应该是执行InitializeComponent后再写判断,建构子初始化可参考以下

     

        public Form1():this(null)
        {
        }
        public Form1(string Name)
        {
          InitializeComponent();
          if (!string.IsNullOrEmpty(Name))
          {
            switch (Name)
            {
              case "0":
                //TODO
                break;
              case "1":
                //TODO
                break;
            }
          }
        }



    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    • 已标记为答案 Ken767 2011年7月27日 2:09
    2011年7月26日 18:17