把对象赋值给变量,再引用变量,比如:
string a="Textbox1";
this.a.Text="sssssssss";这样做是错误的,可是我的程序涉及到这样的操作。程序中我是把菜单名赋值给变量了,然后再调用。在其它语言中可以用宏代换的方法,在C#不行。
望高手解决。

解决方案 »

  1.   

    哥,再怎么样也是这样的吧?
    TextBox a = this.TextBox1;
    this.a.Text = "ssssssssss";
      

  2.   


    TextBox a = TextBox1;
    a.Text = "sssssssss";
      

  3.   

    如果textbox1在一个panle1上
    TextBox a=panle1.Controls["Textbox1"];
      

  4.   

    如果直接在Form1上;
    TextBox a=this.Controls["Textbox1"]; 
      

  5.   

    如果。
    在一个Control就行。TextBox 总该有个容器吧。。
      

  6.   

    c#中没有eval函数,有人利用jscript和codedom,反射做了一个,有点复杂:
    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了
      

  7.   

    大家解决了一些疑惑,但还不彻底。功能是点击菜单,应用相应皮肤,并在菜单前加对号。请看如下代码: private void XPToolStripMenuItem_Click(object sender, EventArgs e)
            {
                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;
                    }
                }
            }
      

  8.   

    ToolStrip a = this.Controls[menuitems[i, 0]] as ToolStrip;7楼NB写法,马克
      

  9.   


    这句正确,但最后一句错误this.a.Checked = true;
    提示“……并不包含a的定义”。
      

  10.   

    this.a.Checked = true;
    --->
    a.Checked = true;GG,a是局部变量
      

  11.   

    楼主可能不太明白this的含义,如果直接在winform里面用,它就表示在当前的这个form中。向你这样的错误其实很好发现,如果不包含a的定义,就没有this后面的智能提示了
      

  12.   

    哈哈,本人对c#掌握还不多,所以问题多些,贻笑大方了。
    去掉this是好办法,但程序还是出现了问题,提示Windows.Form.ToolStrip并不包含Checked定义还是后一句出错,我感觉ToolStrip a = this.Controls[menuitems[i, 0]] as ToolStrip;导致了后面出错,不应该是ToolStrip吧,毕竟是菜单啊,请帮忙。
      

  13.   

    ToolStrip a = this.Controls[menuitems[i, 0]] as ToolStrip;
    WINFORM我不是很熟,但你这里最好在此部后判断这个a是不是为NULL,如果不为NULL再继续下面的逻辑。
    你这个错误应该是TOOLSTRIP根本就没有CHECKED这个属性。
      

  14.   

    明白你的意思,现在a代表的是ToolStrip,不是我需要的ToolStripMenuItem,所以出错,关键没有把ToolStripMenuItem赋值给a。
    ToolStrip a = this.Controls[menuitems[i, 0]] as ToolStrip;
    语句没错,但不是我想要的,应该代表ToolStripMenuItem才对。
    请问应该怎样修改。
      

  15.   

    24楼回答不能解决,
    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也是不行的。需要正确的方法,请高手继续指教。
      

  16.   

    楼主的目的是点击菜单后,换上相应的皮肤和打上对号,实现这个功能,没有必要采取上面的做法,你的思路是错误的,其实实现这个功能很简单,把点击的菜单的text 取出来,然后用switch case 循环,进行匹配,就可以换上相应的皮肤了