2016-08-15 60 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方法上调用它。这样,您可以从其他类中的其他方法引用它。只是我的意见,当处理复杂的对象。

相关问题