2013-12-13 165 views
0

我一直在用Java編寫大量代碼,發現創建控制檯或表單應用程序非常簡單。事實上,所有人都需要添加一個表單並顯示該表單。可以這麼說,就像一個餅乾一樣簡單。但是現在我有了一個用Visual C#編寫的大項目,我沒有用過這麼多。我想,我不確定自己是否正確,但控制檯應用程序是C#就是這樣一個控制檯應用程序,它不能接受任何鼠標動作事件。我希望能夠從窗體內部向C#添加控件,就像在Java中一樣。添加一個按鈕,或添加一個菜單。但在C#中,有幾個文件可以打開,屬性,assemblyinfo.cs,form1.cs等等。下面的代碼在form designer.cs中。以編程方式添加菜單

那麼從編程的角度而不是設計視覺立場的角度來看添加組件的最佳方式在哪裏?

namespace WindowsFormsTestMenuApplication 
{ 
    partial class Form1 
    { 
     /// <summary> 
     /// Required designer variable. 
     /// </summary> 
     private System.ComponentModel.IContainer components = null; 

     /// <summary> 
     /// Clean up any resources being used. 
     /// </summary> 
     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
     protected override void Dispose(bool disposing) 
     { 
      if (disposing && (components != null)) 
      { 
       components.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     #region Windows Form Designer generated code 

     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     private void InitializeComponent() 
     { 
      this.menuStrip1 = new System.Windows.Forms.MenuStrip(); 
      this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 
      this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 
      this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 
      this.aToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 
      this.bToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 
      this.cToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 
      this.menuStrip1.SuspendLayout(); 
      this.SuspendLayout(); 
      // 
      // menuStrip1 
      // 
      this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 
      this.fileToolStripMenuItem, 
      this.openToolStripMenuItem, 
      this.optionsToolStripMenuItem}); 
      this.menuStrip1.Location = new System.Drawing.Point(0, 0); 
      this.menuStrip1.Name = "menuStrip1"; 
      this.menuStrip1.Size = new System.Drawing.Size(284, 24); 
      this.menuStrip1.TabIndex = 0; 
      this.menuStrip1.Text = "menuStrip1"; 
      // 
      // fileToolStripMenuItem 
      // 
      this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 
      this.aToolStripMenuItem, 
      this.bToolStripMenuItem, 
      this.cToolStripMenuItem});    
      this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; 
      this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); 
      this.fileToolStripMenuItem.Text = "File"; 
      // 
      // openToolStripMenuItem 
      // 
      this.openToolStripMenuItem.Name = "openToolStripMenuItem"; 
      this.openToolStripMenuItem.Size = new System.Drawing.Size(48, 20); 
      this.openToolStripMenuItem.Text = "Open"; 
      // 
      // optionsToolStripMenuItem 
      // 
      this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; 
      this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 20); 
      this.optionsToolStripMenuItem.Text = "Options"; 
      // 
      // aToolStripMenuItem 
      // 
      this.aToolStripMenuItem.Name = "aToolStripMenuItem"; 
      this.aToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 
      this.aToolStripMenuItem.Text = "A"; 
      // 
      // bToolStripMenuItem 
      // 
      this.bToolStripMenuItem.Name = "bToolStripMenuItem"; 
      this.bToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 
      this.bToolStripMenuItem.Text = "B"; 
      // 
      // cToolStripMenuItem 
      // 
      this.cToolStripMenuItem.Name = "cToolStripMenuItem"; 
      this.cToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 
      this.cToolStripMenuItem.Text = "C"; 
      // 
      // Form1 
      // 
      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
      this.ClientSize = new System.Drawing.Size(284, 262); 
      this.Controls.Add(this.menuStrip1); 
      this.MainMenuStrip = this.menuStrip1; 
      this.Name = "Form1"; 
      this.Text = "Form1"; 
      this.menuStrip1.ResumeLayout(false); 
      this.menuStrip1.PerformLayout(); 
      this.ResumeLayout(false); 
      this.PerformLayout(); 

     } 

     #endregion 

     private System.Windows.Forms.MenuStrip menuStrip1; 
     private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; 
     private System.Windows.Forms.ToolStripMenuItem aToolStripMenuItem; 
     private System.Windows.Forms.ToolStripMenuItem bToolStripMenuItem; 
     private System.Windows.Forms.ToolStripMenuItem cToolStripMenuItem; 
     private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; 
     private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; 
    } 
} 
+0

首先閱讀文件並理解生成的代碼。 – SLaks

+0

如何在上面的代碼中添加另一個菜單項。我試圖複製aToolStringMenuItem並粘貼它的結尾,然後在這裏添加新的部分this.cToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();但我仍然收到和錯誤。我知道從設計器中添加菜單項更容易,但我只是試圖通過編程方式來編程C#中的某些內容。 –

+0

你會得到什麼錯誤? – SLaks

回答

1

您是否試圖在運行時添加控件?如果是這樣,正如SLaks所述,您只需創建一個新的控件實例並將其添加到您的表單中即可。

// Add a menustrip to the form. 
MenuStrip menuStrip = new MenuStrip(); 
menuStrip.Dock = DockStyle.Top; 
this.Controls.Add(menuStrip); 

否則,爲什麼不利用可視化設計器將控件添加到表單中?

+0

我正在試圖添加一個按鈕到窗體上,當我點擊一個菜單項。我只是試圖通過編程來實現它,因爲它總是比所有時間使用設計編輯器更好的學習方式。我正試圖在C#或C++世界中學習我的編程技巧,並且使編程更像編譯控制檯應用程序那樣更加困難。我同意設計師對快速開發更有用。 –

1

WinForms控件是常規對象,就像AWT或Swing一樣。

您可以創建一個new ToolStripItem(),設置其屬性,然後將其添加到DropDownItems集合。

+0

討厭但問什麼是DropDownItems集合。我這是C#用來向表單添加項目的東西。我現在在工作,所以深入研究視覺工作室有點困難。你能展示一個代碼示例嗎?你可以創建表單並在控制檯應用程序中添加菜單項嗎? –

+0

@DougHauf:是的。控制檯應用程序和WinForms應用程序之間唯一的區別在於WinForms應用程序沒有控制檯。你在你的問題中粘貼了完整的示例代碼; _閱讀_! – SLaks

2

聽起來有點像我一般的設計/方法問題。 爲什麼不使用WinForm的WPF?在Visual Studio中給你一個非常方便的設計器。您可以以所見即所得風格輕鬆構建您的GUI。支持數據綁定 - 一旦熟悉 - 非常方便。 但是,稍後您仍然可以在運行時添加控件等,請參閱Breems答案。 注意:如果您使用WPF,則需要使用Windows的調度程序,如果要從Windows之外的其他線程添加控件。

相關問題