今天在使用菜单注意到这样一个情况:
private MainMenu myMainMenu;
private MenuItem menuitemFile;
private MenuItem menuitemUD;myMainMenu=new MainMenu();
//menuitemFile=new MenuItem(); //menuitemFile并未先进行实例化,下面的代码也正确。
menuitemFile=myMainMenu.MenuItems.Add("&File");
menuitemUD=new MenuItem(); //这里需先实例化,后面的代码才不会出错。
menuitemUD.Text="Update &Date";//请问menuitemFile和menuitemUD都是MenuItem对象,上面的使用有什么区别?面向对象的语言里好像经常碰到类似问题--有时需先实例化再使用,有时却不用先实例化。
private MainMenu myMainMenu;
private MenuItem menuitemFile;
private MenuItem menuitemUD;myMainMenu=new MainMenu();
//menuitemFile=new MenuItem(); //menuitemFile并未先进行实例化,下面的代码也正确。
menuitemFile=myMainMenu.MenuItems.Add("&File");
menuitemUD=new MenuItem(); //这里需先实例化,后面的代码才不会出错。
menuitemUD.Text="Update &Date";//请问menuitemFile和menuitemUD都是MenuItem对象,上面的使用有什么区别?面向对象的语言里好像经常碰到类似问题--有时需先实例化再使用,有时却不用先实例化。
private MainMenu myMainMenu;
private MenuItem menuitemFile;
private MenuItem menuitemUD;myMainMenu=new MainMenu();
//menuitemFile=new MenuItem(); //menuitemFile并未先进行实例化,下面的代码也正确。
menuitemFile=myMainMenu.MenuItems.Add("&File");
menuitemUD=new MenuItem(); //这里需先实例化,后面的代码才不会出错。
menuitemUD.Text="Update &Date";因为myMainMenu.MenuItems.Add("&File");返回的是MenuItem类型吧?而下面的代码,你的menuitemUD对象未实例化你就调用它的属性,当然不行
menuitemUD=new MenuItem(); //这里需先实例化,后面的代码才不会出错。
menuitemUD.Text="Update &Date";
整型值赋给一个MenuItem变量更加让人费解了!!
private MainMenu myMainMenu;
private MenuItem menuitemFile;
private MenuItem menuitemUD;
下面的代码在一个方法里面,
方法的调用又先后顺序,
编译器只能认为,可能在另一个方法中已经赋值,然后再调用这个方法,
如果是这样,不可能出什么错误,
所以编译器肯定不能自动判断!!!拜托以后代码要贴全!
至少要说明!
否则这直接存在语法错误的代码,
一般很少有人有耐心跟你猜来猜去……myMainMenu=new MainMenu();
//menuitemFile=new MenuItem(); //menuitemFile并未先进行实例化,下面的代码也正确。
menuitemFile=myMainMenu.MenuItems.Add("&File");
menuitemUD=new MenuItem(); //这里需先实例化,后面的代码才不会出错。
menuitemUD.Text="Update &Date";
这两个方法难道是一个?!
using System.Windows.Forms;
using System.Drawing;public class frmApp:Form
{
private Label myDateLabel;
private MainMenu myMainMenu; private MenuItem menuitemFile;
private MenuItem menuitemUD;
private MenuItem menuitemActive;
private MenuItem menuitemExit;
private MenuItem menuitemHelp;
private MenuItem menuitemAbout; public frmApp()
{
InitializeComponent();
} private void InitializeComponent()
{
this.Text="STY Menus";
this.StartPosition=FormStartPosition.CenterScreen;
this.FormBorderStyle=FormBorderStyle.Sizable; myDateLabel=new Label();
DateTime currDate=new DateTime();
currDate=DateTime.Now;
myDateLabel.Text=currDate.ToString();
myDateLabel.AutoSize=true;
myDateLabel.Location=new Point(50,70);
myDateLabel.BackColor=this.BackColor;
this.Controls.Add(myDateLabel);
this.Width=(myDateLabel.PreferredWidth+100); CreateMyMenu();
} public void CreateMyMenu()
{
myMainMenu=new MainMenu();
//menuitemFile=new MenuItem(); //
menuitemFile=myMainMenu.MenuItems.Add("&File"); menuitemUD=new MenuItem();
menuitemUD.Text="Update &Date";
menuitemUD.Shortcut=Shortcut.CtrlD;
menuitemUD.Click+=new System.EventHandler(this.MenuUpdate_Selection);
//menuitemUD.Checked=true;
menuitemFile.MenuItems.Add(menuitemUD); menuitemExit=new MenuItem();
menuitemExit.Text="E&xit";
menuitemExit.Shortcut=Shortcut.CtrlX;
menuitemExit.ShowShortcut=false;
menuitemExit.Click+=new System.EventHandler(this.FileExit_Selection);
menuitemFile.MenuItems.Add(menuitemExit); menuitemHelp=myMainMenu.MenuItems.Add("&Help"); menuitemActive=new MenuItem();
menuitemActive.Text="Active";
menuitemActive.Click+=new System.EventHandler(this.ActiveMenu_Selection);
menuitemActive.Checked=true;
menuitemHelp.MenuItems.Add(menuitemActive); menuitemAbout=new MenuItem();
menuitemAbout.Text="&About";
menuitemAbout.Shortcut=Shortcut.CtrlA;
menuitemAbout.ShowShortcut=false;
menuitemAbout.Click+=new System.EventHandler(this.FileAbout_Selection);
menuitemHelp.MenuItems.Add(menuitemAbout); this.Menu=myMainMenu;
} protected void ActiveMenu_Selection(object sender,System.EventArgs e)
{
MenuItem tmp;
tmp=(MenuItem)sender;
if(tmp.Checked==true) //这里的object sender是值传递还是引用传递,如果说是值传递的话,修改tmp的属性,不应该影响到那个触发此事件的菜单项的属性吧?
tmp.Checked=false;
else
tmp.Checked=true;
}
protected void MenuUpdate_Selection(object sender,System.EventArgs e)
{
DateTime currDate=new DateTime();
currDate=DateTime.Now;
this.myDateLabel.Text=currDate.ToString();
} protected void FileExit_Selection(object sender,System.EventArgs e)
{
this.Close();
} protected void FileAbout_Selection(object sender,System.EventArgs e)
{
//
MessageBox.Show("test");
} public static void Main(string[] args)
{
new frmApp().ShowDialog();
}
}
我该怎么说?
谢谢楼上的,
不过还是没说明使用这种形式:
menuitemFile=myMainMenu.MenuItems.Add("&File");
时不用先对menuitemFile实例化?
是意味着方法返回的就是对象(类的实例),而不是类吗?
bool b = s.Equal("s");了解?