2013-07-15 40 views
0

我的問題在於,我正在開發一個小應用程序,以在SCCM 2012服務器上執行一些操作。使用Windows窗體傳遞對象

目前它只是創建,刪除和移動文件夾。

我想要做的是有一個窗體,你登錄。這已經完成。從這裏你應該選擇你想要做什麼樣的操作(例如移動或刪除)。然後會彈出一個新的表單,並在這裏做你的魔力。

這一切都很完美,但是,我認爲我沒有做到「正確」的方式。現在,我將連接對象傳遞給構造函數以創建所有創建的窗體,並且這些窗體是相互創建的。是否有意義?

我想要做的是擁有某種控制類,從創建登錄表單的位置決定是否應該隱藏或顯示,並將連接對象傳遞到我想要的位置,當它已被返回/保存。

我的問題是,當我創建表單時,所有的控制流都轉到該表單。如果我可以在控制類中保留流,並且從這裏控制是否根據成功登錄來隱藏/顯示錶單,我寧願選擇。

我希望你能理解我的問題,並可能有解決方案嗎?

這裏是Form1的代碼片段:

public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     Application.Exit(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     userName = textBox1.Text; 
     password = textBox2.Text; 

     getConnection = Connect(COMPUTER, userName, password); 

     if (connection != null) 
     { 
      Form2 form2 = new Form2(connection); 
      form2.Show(); 
      this.Hide(); 
     } 
    } 
    public WqlConnectionManager Connect(string serverName, string userName, string userPassword) 
    { 
     try 
     { 
      SmsNamedValuesDictionary namedValues = new SmsNamedValuesDictionary(); 
      WqlConnectionManager connection = new WqlConnectionManager(namedValues); 

      if (System.Net.Dns.GetHostName().ToUpper() == serverName.ToUpper()) 
      { 
       // Connect to local computer. 
       connection.Connect(serverName); 
      } 
      else 
      { 
       // Connect to remote computer. 
       connection.Connect(serverName, userName, userPassword); 
      } 

      return connection; 
     } 
     catch (SmsException e) 
     { 
      MessageBox.Show("Failed to connect. Error: " + e.Message); 
      return null; 
     } 
     catch (UnauthorizedAccessException e) 
     { 
      MessageBox.Show("Failed to authenticate. Error: " + e.Message); 
      return null; 
     } 
    } 
+0

我想連接方法應該是在你的窗口2並調用它(這取決於什麼ü想做的事)後,1)在表單加載事件或2)用戶交互(用戶想要做什麼)。也應該將連接放置在不同的類(訪問層)中。 – terrybozzio

+0

你可以通過它的聲音將它作爲一個單身人士 – Sayse

回答

0

做你正在嘗試做的一種常見方法是讓你與你的所有關於它的選擇主要形式。當表單加載時,您啓動登錄表單(通常在主窗體的構造函數或OnShow方法中)。如果登錄失敗,則調用Application.Exit()。否則,你繼續主要的形式。本質上,主要形式是您的控制器的

下面是什麼我的意思是很簡單樣品..

public Form1() 
{ 
    InitializeComponent(); 

    LoginForm loginForm = new LoginForm(); 
    DialogResult result = loginForm.ShowDialog(); 
    if (result != System.Windows.Forms.DialogResult.OK) 
     Application.Exit(); 
} 

private void CreateButton_Click(object sender, EventArgs e) 
{ 
    CreateForm createForm = new CreateForm(); 
    createForm.Show(); 
} 

private void DeleteButton_Click(object sender, EventArgs e) 
{ 
    DeleteForm deleteForm = new DeleteForm(); 
    deleteForm.Show(); 
} 

private void MoveButton_Click(object sender, EventArgs e) 
{ 
    MoveForm moveForm = new MoveForm(); 
    moveForm.Show(); 
} 
+0

謝謝約翰!如果我這樣做,然後按照其他關於在自己的圖層/類中進行連接的註釋,那麼您會在哪裏建立連接?將用戶名和密碼傳遞迴控制表單,並從那裏建立連接,或者在登錄表單中建立連接,並將連接對象傳遞迴控制表單?或者另一種方式? –

+0

我會以最高級別創建連接,然後將其傳遞給所有的孩子。在這個簡單的例子中,我可能會在主窗體構造函數中完成它,並將其保留爲窗體上的一個私有變量。 –

+0

好吧,非常感謝! –

相關問題