2009-10-26 17 views
5

C# kullanarak konsoldan bir Windows formu oluşturmak istiyorum. display'un kabaca Linux'ta yaptığı gibi, içeriğini değiştirebilir vb. Bu mümkün mü?Konsolu Windows formu

cevap

6

Sen System.Windows.Forms için bir referans ekleyin ve sonra gitmek iyi olması gerekir. Ayrıca, STAThreadAttribute uygulamasını uygulamanızın giriş noktasına da uygulamak zorunda kalabilirsiniz.

using System.Windows.Forms; 

class Program 
{ 
    [STAThread] 
    static void Main(string[] args) 
    { 
     MessageBox.Show("hello"); 
    } 
} 

... daha karmaşık ...

using System.Windows.Forms; 

class Program 
{ 
    [STAThread] 
    static void Main(string[] args) 
    { 
     var frm = new Form(); 
     frm.Name = "Hello"; 
     var lb = new Label(); 
     lb.Text = "Hello World!!!"; 
     frm.Controls.Add(lb); 
     frm.ShowDialog(); 
    } 
} 
4

Evet, bir formu Konsolda başlatabilirsiniz. System.Windows.Forms bir başvuru ekleyin ve aşağıdaki örnek kodu kullanın:

System.Windows.Forms.Form f = new System.Windows.Forms.Form(); 
f.ShowDialog(); 
+0

Downmodlar hakkında bazı yorumlar alabilir miyim? –

+0

Bu neden azalıyordu? Bu harika bir uygulama olmayabilir, ama kesinlikle mümkün. –

+0

Bu, STAThread özniteliği olmadan çalışır mı? –

1

Bu

using System.Windows.Forms; 

[STAThread] 
static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.Run(new MyForm()); 
} 

Bye deneyebilirsiniz.

4

ortak cevap: (here alınan)

[STAThread] 
static void Main() 
{  
    Application.Run(new MyForm()); 
} 

Alternatifler ise, örneğin - ana uygulamanın dışında bir iş parçacığı bir form başlatmak istiyorum:

Thread t = new Thread(new ThreadStart(StartNewStaThread)); 

// Make sure to set the apartment state BEFORE starting the thread. 
t.ApartmentState = ApartmentState.STA; 
t.Start(); 

private void StartNewStaThread() { 
    Application.Run(new Form1()); 
} 

.

Thread t = new Thread(new ThreadStart(StartNewStaThread)); 
t.Start(); 

[STAThread] 
private void StartNewStaThread() { 
    Application.Run(new Form1()); 
}