2016-08-15 62 views
0

我只需要知道如何使用從其它塊或背景(或不管他們稱之爲)變量...如何使用一個變量從其他方面在c#

我試圖創建一個應用程序的安裝程序對於使用PowerShell的Windows 10,但我只是一個初學者的C#...

我有2個按鈕的瀏覽和安裝,我聲明瀏覽按鈕的塊中的文件的位置,我試圖使用該變量在安裝按鈕的上下文中。

但我得到的是「名稱」appFile「在當前上下文中不存在。」

這裏是我的代碼:

private void button3_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("Created by Carlos Miguel Salamat","Windows App Installer"); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

     OpenFileDialog file = new OpenFileDialog(); 
     file.Title = "Choose Package File"; 
     file.InitialDirectory = @"c:\"; 
     file.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"; 
     file.FilterIndex = 2; 
     file.RestoreDirectory = true; 
     if (file.ShowDialog() == DialogResult.OK) 
     { 
      textBox1.Text = file.FileName; 

      string appFile = file.FileName; 
     } 
    } 
    private void button2_Click(object sender, EventArgs e) 
    { 
     string strCmdText; 
     strCmdText = "powershell.exe add-appxpackage"; 
     System.Diagnostics.Process.Start("CMD.exe", strCmdText, appFile); 
    } 
    } 
} 

`

+0

您需要在更高級別聲明appFile,例如表單級別。那麼它可用於下面的其他區域。 – BugFinder

回答

1

它定義爲全球,

string appFile = ""; 

private void button1_Click(object sender, EventArgs e) 
{ 

    OpenFileDialog file = new OpenFileDialog(); 
    file.Title = "Choose Package File"; 
    file.InitialDirectory = @"c:\"; 
    file.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"; 
    file.FilterIndex = 2; 
    file.RestoreDirectory = true; 
    if (file.ShowDialog() == DialogResult.OK) 
    { 
     textBox1.Text = file.FileName; 

     this.appFile = file.FileName; 
    } 
} 
private void button2_Click(object sender, EventArgs e) 
{ 
    string strCmdText; 
    strCmdText = "powershell.exe add-appxpackage"; 
    System.Diagnostics.Process.Start("CMD.exe", strCmdText, this.appFile); 
} 

希望幫助,

+0

謝謝...它的工作:) –

0

您需要將該變量至少放在類上下文中才能從該類中的其他方法訪問該變量。如果你需要從類外部訪問它,你需要把它公開,並添加二傳手/吸氣

public class YourClass { 
    public string AppFile {get;set;} 

    private void button3_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("Created by Carlos Miguel Salamat","Windows App Installer"); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

     OpenFileDialog file = new OpenFileDialog(); 
     file.Title = "Choose Package File"; 
     file.InitialDirectory = @"c:\"; 
     file.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"; 
     file.FilterIndex = 2; 
     file.RestoreDirectory = true; 
     if (file.ShowDialog() == DialogResult.OK) 
     { 
      textBox1.Text = file.FileName; 
      this.AppFile = file.FileName; 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 

     string strCmdText; 
     strCmdText = "powershell.exe add-appxpackage"; 
     System.Diagnostics.Process.Start("CMD.exe", strCmdText, this.AppFile); 
    } 

}

你也可以使用文本屬性從textBox1的是這樣的:

private void button2_Click(object sender, EventArgs e) 
    { 

     string strCmdText; 
     strCmdText = "powershell.exe add-appxpackage"; 
     System.Diagnostics.Process.Start("CMD.exe", strCmdText, textBox1.Text); 
    } 

但我會建議你使用第一個解決方案。

1

答案顯然是正確的,但一味地應用之前,我強烈建議你找編程和麪向對象的一些101 。大多數語言的變量範圍規則非常相似。如果您嘗試跳過基礎知識,您會發現自己處於類似的令人費解的情況。

0

Wim,是對的。你可以很好地將這種類型的代碼分解成一個名爲file的類,然後在click方法上調用它。這樣,您可以從其他類中的其他方法引用它。只是我的意見,當處理複雜的對象。

相關問題