C#在不同窗体中设置菜单menuStrip可用或不可用(或者使之变灰)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#在不同窗体中设置菜单menuStrip可用或不可用(或者使之变灰)相关的知识,希望对你有一定的参考价值。

求救:我第一个Form有menuStrip1,其中有一个子菜单是“登录”,运行时,点“登录”会弹出一个新的Form3,Form3上有个button"确定",我想首先设置那些菜单不可用,当点击“确定”成功登录后设置菜单可用。
回答满意,我还有分追加。这个好商量。急用

以下程序测试通过。
假设你有菜单的FORM为FORM1,下面的示例中只添加两个菜单:登录和文件
FORM1代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 登录实验

public partial class Form1 : Form

public Form1()

InitializeComponent();

/// <summary>
/// FORM1的LOAD事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)

登录ToolStripMenuItem.Enabled = true;

//让文件菜单不可用
文件ToolStripMenuItem.Enabled = false;
/*
把你其他菜单也按照文件菜单的写法,使其不可用
*/



/// <summary>
/// FORM1中单击登录菜单的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 登录ToolStripMenuItem_Click(object sender, EventArgs e)

Form3 formLogin = new Form3(this);
formLogin.ShowDialog();




FORM3代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 登录实验

public partial class Form3 : Form

private Form1 parent;//定义主窗体的一个成员,表示FORM1

/// <summary>
/// FORM3的构造函数,把FORM1传递进来
/// </summary>
/// <param name="_parent"></param>
public Form3(Form1 _parent)

InitializeComponent();
parent = _parent;

/// <summary>
/// FORM3中单击确定按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonOK_Click(object sender, EventArgs e)

//你自己写判断是否登录成功的语句
//当判断登录成功后,执行下列代码。

//让文件菜单可用
parent.文件ToolStripMenuItem.Enabled = true;
/*
把你其他菜单也按照文件菜单的写法,使其可用
*/

//让登录菜单不可用,以免用户再次登录,当然你根据自己需要,可以让其可用。
parent.登录ToolStripMenuItem.Enabled = false;

this.Close();


参考技术A 还要将“文件ToolStripMenuItem”的“Modifiers”属性由"Private"改为"Public"

在c#中怎么能在一个窗口中设置另一个窗口控件的属性?急急急!!!

现在的问题是,我有两个窗体,一个main窗体,一个login窗体:login窗体中设置main窗体中的菜单控件menustrip的enable 属性为false
我该怎么做???急急急...
最好有示范代码。。。本人菜鸟。。。。谢谢啊..

1、设置menustrip的Modifiers属性为非private,一般不建议这样做;
2、用构造函数,例如在login窗体中:
Menustrip menu1=new Menustrip();
public loginfrm(Menustrip menu2)

InitializeComponent();
menu1=menu2;

3、用委托
main窗体中:
public bool menuEnable

getreturn menustrip.enable;
set(menustrip.enable=value;)

login窗体中:
mainfrm.menuEnable=false;追问

你这123写的是步骤还是有三种方法啊?我没看懂唉...能再详细一点吗?

参考技术A 穿窗体的静态变量。。。。。类似于单例模式。。。。 public static Main _cmain=null;//窗体初始化的时候 进行new下。。。然后 其他窗体通过引用可以达到效果。。LZ可以试试看。。或者自己google相关信息 做个提示!! 参考技术B 这个问题我也遇到过,如果用Fr2控制Form1中的窗体控件,可以在Fr2的事件中编写Form1 frm1 = (Form1 )this.Owner; 语句,这样就可以用frm1对象控制Form1中的控件了.追问

用了你的想法,可是不行啊,它报 System.NullReferenceException异常啊

追答

这个异常貌似是你缺少对所修改窗体的引用啊!你添加using form1试试,这里的form1依照你程序而定。

参考技术C private MainForm m_data = null;
private void readdata_Load(object sender, EventArgs e)

m_data = new MainForm();
m_data.browseControl.Enabled = false;
参考技术D 传引用,学过么追问

能不能详细点呢?我菜鸟一个啊

追答

传参数会不?

追问

传参数会啊...能不能把详细步骤写一下啊...这个我有点晕

追答

你在本窗体会操作吧?this.控件.属性=值,你把这个this传到另一个窗体不就行了么,我手机上的没办法发代码

追问

用过了,但是他报空引用异常啊,为什么啊

追答

发你QQ,我给你发个项目

追问

980463316,谢谢啊..

以上是关于C#在不同窗体中设置菜单menuStrip可用或不可用(或者使之变灰)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 窗体 (C#) 中设置列​​表框的确切高度?

如何在Windows应用程序中设置用户空闲或不活动时的定时器。

C# winform程序,怎么实现菜单的功能

C#利用tabControl控件实现多窗体嵌入及关闭

C# WinForm界面设计教程第12节——MenuStrip菜单

VS2005中menustrip控件如何实现tabcontrol功能?