把对象赋值给变量,再引用变量,比如:
string a="Textbox1";
this.a.Text="sssssssss";这样做是错误的,可是我的程序涉及到这样的操作。程序中我是把菜单名赋值给变量了,然后再调用。在其它语言中可以用宏代换的方法,在C#不行。
望高手解决。
string a="Textbox1";
this.a.Text="sssssssss";这样做是错误的,可是我的程序涉及到这样的操作。程序中我是把菜单名赋值给变量了,然后再调用。在其它语言中可以用宏代换的方法,在C#不行。
望高手解决。
TextBox a = this.TextBox1;
this.a.Text = "ssssssssss";
TextBox a = TextBox1;
a.Text = "sssssssss";
TextBox a=panle1.Controls["Textbox1"];
TextBox a=this.Controls["Textbox1"];
在一个Control就行。TextBox 总该有个容器吧。。
public class Evaluator
{
/**/
///
/// 计算结果,如果表达式出错则抛出异常
///
/// 表达式,如"1+2+3+4"
/// 结果
public static object Eval(string statement)
{
return _evaluatorType.InvokeMember(
"Eval",
BindingFlags.InvokeMethod,
null,
_evaluator,
new object[] { statement }
);
}
/**/
///
///
///
static Evaluator()
{
//构造JScript的编译驱动代码
CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript");
CompilerParameters parameters;
parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
CompilerResults results;
results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);
Assembly assembly = results.CompiledAssembly;
_evaluatorType = assembly.GetType("Evaluator");
_evaluator = Activator.CreateInstance(_evaluatorType);
}
private static object _evaluator = null;
private static Type _evaluatorType = null;
/**/
///
/// JScript代码
///
private static readonly string _jscriptSource =
@"class Evaluator
{
public function Eval(expr : String) : String
{
return eval(expr);
}
}";
}
2010有所谓动态语言运行时,可能等它出来后c#也能用上eval了
{
SkinChecked("XPToolStripMenuItem");
}
public void SkinChecked(string menuitem)
{
string Menuitems;
string[,] menuitems=new string [7,2];
menuitems[0,0] = "水晶绿ToolStripMenuItem";
menuitems[1,0] = "XPToolStripMenuItem";
menuitems[2,0] = "waveToolStripMenuItem";
menuitems[3,0] = "macOSToolStripMenuItem";
menuitems[4,0] = "MP10ToolStripMenuItem";
menuitems[5,0] = "MSNToolStripMenuItem";
menuitems[6,0] = "vistaToolStripMenuItem"; menuitems[0, 1] = "DiamondGreen.ssk";
menuitems[1, 1] = "XPBlue.ssk";
menuitems[2, 1] = "Wave.ssk";
menuitems[3, 1] = "MacOS.ssk";
menuitems[4, 1] = "MP10.ssk";
menuitems[5, 1] = "MSN.ssk";
menuitems[6, 1] = "vistagreen.ssk"; Menuitems = menuitem;
for (int i = 0; i < 7; i++)
{
if (menuitems[i, 0] == Menuitems)
{
this.skinEngine1.SkinFile = menuitems[i, 1];
ToolStrip a = this.Controls[menuitems[i, 0]];//此句错误,请问怎么办?
this.a.Checked = true;
}
}
}
这句正确,但最后一句错误this.a.Checked = true;
提示“……并不包含a的定义”。
--->
a.Checked = true;GG,a是局部变量
去掉this是好办法,但程序还是出现了问题,提示Windows.Form.ToolStrip并不包含Checked定义还是后一句出错,我感觉ToolStrip a = this.Controls[menuitems[i, 0]] as ToolStrip;导致了后面出错,不应该是ToolStrip吧,毕竟是菜单啊,请帮忙。
WINFORM我不是很熟,但你这里最好在此部后判断这个a是不是为NULL,如果不为NULL再继续下面的逻辑。
你这个错误应该是TOOLSTRIP根本就没有CHECKED这个属性。
ToolStrip a = this.Controls[menuitems[i, 0]] as ToolStrip;
语句没错,但不是我想要的,应该代表ToolStripMenuItem才对。
请问应该怎样修改。
ToolStrip a = Controls[menuitems[i, 0]] as ToolStrip请看23楼。
现在程序中a代表的是ToolStrip,不是ToolStripMenuItem,而我需要ToolStripMenuItem
因为ToolStripMenuItem有Checked事件,而简单的把语句
ToolStrip a = this.Controls[menuitems[i, 0]] as ToolStrip
改为
ToolStripMenuItem a = this.Controls[menuitems[i, 0]] as ToolStripMenuItem也是不行的。需要正确的方法,请高手继续指教。