我只需要知道如何使用其他块或上下文中的变量(或者他们称之为的任何内容)......
我正在尝试使用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 :(得分: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);
}
希望有所帮助,
答案 1 :(得分:1)
答案显然是正确的,但在盲目应用之前,我强烈建议您在编程和面向对象方面寻找101。变量范围规则在大多数语言中非常相似。如果你试图跳过基础知识,你会发现自己陷入了类似的困境。
答案 2 :(得分:0)
你可以阅读&在这里了解它:
https://msdn.microsoft.com/en-us/library/ms973875.aspx
可能是一个简短的答案,但不是给你一条鱼,你最好学会如何捕捉它。
答案 3 :(得分:0)
您需要至少在类上下文中放置变量,以便从此类中的其他方法访问它。如果您需要从课外访问它,您需要将其公开并添加setter / getter
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中的Text属性,如下所示:
private void button2_Click(object sender, EventArgs e)
{
string strCmdText;
strCmdText = "powershell.exe add-appxpackage";
System.Diagnostics.Process.Start("CMD.exe", strCmdText, textBox1.Text);
}
但我会建议你使用第一个解决方案。
答案 4 :(得分:0)
Wim,是对的。您可以将这种类型的代码打破,比如说一个名为file的类,然后在click方法上调用它。这样,您可以从其他类中的其他方法引用它。在使用复杂的对象时,我的意见。