自己怎么做提示框(替代MessageBox)?请帮帮忙

kolige 2009-12-16 03:14:14
我想自己做一个对话框,代替MessageBox。

我现在的做法是添加一个windows窗体,在上面放了一个label,把窗体的FormBorderStyle设置成FixedSingle,但是这样就限制了窗体的大小,我想实现和MessageBox一样的功能要怎么做呢?

要求是:
1、弹出的提示框大小随着提示框内容大小变化,没有最大化最小化和那个X。
2、点击OK或者Cancel能释放对话框资源,请问在这响应函数里面要调用什么?就一个Dispose能满足条件吗?

希望大家帮下忙,不要让我去看书,现在没有时间看。我不是C#语言使用者,所以对C#很不熟悉,希望大家能讲得详细一点,谢谢了。
...全文
833 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
kolige 2009-12-23
  • 打赏
  • 举报
回复
好了,结贴了,谢谢各位
nixiang12 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sharp_future 的回复:]
搞个图片盖住也不错
[/Quote]
和我想的一样
coolio1 2009-12-21
  • 打赏
  • 举报
回复
label1.autosize=true;
form.autosize=true;
HatoLee 2009-12-21
  • 打赏
  • 举报
回复
学习中……
tebbic 2009-12-20
  • 打赏
  • 举报
回复
留意。。。
RFEZGC 2009-12-20
  • 打赏
  • 举报
回复
MessageBox ??以下几点需要做到
不仅仅是显示窗体那么简单哈,还要在调用的那个线程被阻止,如果这个作为Msgbox的窗体不消失,那个调用的线程是不能退出的,(多线程处理)
还要 某些窗体过程的处理,比如,移动窗体,但不能被最大/小化(窗体过程处理)等
返回值,你可以定义为MessageBox的返回值
跟目标窗体关联哈,
其实C#的MessageBox做得够好了,但有所欠缺,比如,在限定的时候之后,自动关闭,这个系统是没有提供方法的,需要算法来实现,或者自己写一个,俺之后就打算这么写一个,但看上去挺简单,其实实现起来很麻烦
kolige 2009-12-17
  • 打赏
  • 举报
回复
我现在的做法是在提示框上拖一个按钮控件,在里面关闭窗口,并改变一个static的变量,这个变量就是判断提示框点击的是哪个按钮:
[code=C]
static int retype=0;

public MyBox(string str)
{
InitializeComponent();
retype = 0;
Label L = new Label();
L.Parent = this;
L.AutoSize = true;
this.AutoSize = true;
L.Text = str;
this.Width = L.Width + 20;
L.Location = new System.Drawing.Point(this.Location.X + ((this.Width - L.Width) / 2), (this.Location.Y + this.Height-50) / 2);
}

public int showmybox()
{
this.ShowDialog();
return retype;
}

private void button1_Click(object sender, EventArgs e)//这个是提示框上其中一个按钮响应函数
{
retype = 1;
this.Close();
}

[code]
这样的话,如果需要的是几个按钮,就要在提示框上拖几个按钮(确定、取消),构造函数接收多一个参数,用来确定按钮的数量,显示的时候,根据这个参数来显示某些按钮,隐藏某些按钮,这样好像不是很方便,能不能像Label一样,把按钮也放在构造函数里面动态new出来?这样new出来的按钮怎么动态添加其点击响应函数?
另外我现在是使用一个static变量来判断点击的是什么按钮,有没有好点的方法呢?

谢谢大家的回答,希望能再解决这两个问题,谢谢了
长腿爸爸 2009-12-17
  • 打赏
  • 举报
回复
study!
wartim 2009-12-17
  • 打赏
  • 举报
回复
用这个的前提是form是ShowDialog的
wartim 2009-12-17
  • 打赏
  • 举报
回复
Close()会调用Dispose(),不用自己调用,

其实设置确定按钮的DialogResult=DialogResult.OK就可以,不用自己close,系统自己会处理
nashina 2009-12-17
  • 打赏
  • 举报
回复
释放资源是只要 close就可以了,窗体会自己释放的
kolige 2009-12-17
  • 打赏
  • 举报
回复
顶一下
kolige 2009-12-17
  • 打赏
  • 举报
回复
感觉分数太少了,怎么加分的?谁知道??
kolige 2009-12-17
  • 打赏
  • 举报
回复
要求是:
写一个窗体,比如名字叫MyMessageBox。
使用的时候就添加下面的代码

MyMessageBox Mybox = new MyMessageBox("输入字符串",按钮类型);
Mybox.showMybox();

原因是我要把MessageBox上面的按钮变成英文的,所以自己做一个MessageBox。
我现在已经做的是:
用了11楼的方法,在构造函数里面new了个label,然后设置这个label的位置和内容,代码如下:

public MyBox(string str)
{
InitializeComponent();
retype = 0;
Label L = new Label();
L.Parent = this;
L.AutoSize = true;
this.AutoSize = true;
L.Text = str;
this.Width = L.Width + 20;
L.Location = new System.Drawing.Point(this.Location.X + ((this.Width - L.Width) / 2), (this.Location.Y + this.Height-50) / 2);
}

然后我要在提示框上添加按钮,所以这个构造函数要加一个参数作为第二个参数,用来判断按钮要怎么显示(即:显示一个yes按钮还是yes和cancel两个按钮)。
有两个问题:
1、按钮如果直接拖上去,要根据构造函数的第二个参数来判断是显示一个按钮还是显示两个按钮(还要设置按钮的位置等等)。能不能在构造函数里面直接用new的方法创建按钮呢?如果可以那么如何添加其响应函数呢?
2、在点击按钮后,提示框关闭并释放资源,那么怎么知道点击的是什么按钮呢(如果有两个按钮)?这个问题wartim在15楼给了我答案,直接修改DialogResult,我开始不知道有这个参数。。。(第一次接触C#)

现在我有一个新的问题,MessageBox是怎么实现返回点击哪个按钮的?或者你说用DialogResult判断,我想知道DialogResult是不是一个static的呢?因为我现在的理解是这样:MessageBox.ShowDialog()这个函数显示了窗体,并在点击按钮的时候销毁窗体、释放资源,然后返回一个数值,既然销毁窗体、释放资源,那么返回的这个变量应该是static的?不知道我这样理解是不是正确的?
arit11 2009-12-17
  • 打赏
  • 举报
回复
我现在的做法是添加一个windows窗体,在上面放了一个label,把窗体的FormBorderStyle设置成FixedSingle,但是这样就限制了窗体的大小,我想实现和MessageBox一样的功能要怎么做呢?
能不能说的再清楚些?我不是很懂你说的什么意思?有个主窗体,准备怎样跳出messagebox,是随着时间,还是点击什么?label里面是固定的 还是什么?
cjnkd 2009-12-17
  • 打赏
  • 举报
回复
ding
kolige 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 seberila 的回复:]
用个类写进函数再调用它试试
C# codeusing System;using System.Text;publicclass MessageBox
{private MessageBox()
{ }publicstaticvoid ShowConfirm(System.Web.UI.WebControls.WebControl Control,string msg)
{
Control.Attributes.Add("onclick","return confirm('"+ msg+"');");
}publicstaticvoid Show(System.Web.UI.Page page,string msg)
{ }publicstaticvoid ShowAndRedirect(System.Web.UI.Page page,string msg,string url)
{ }publicstaticvoid ResponseScript(string script)
{ }
}
[/Quote]
你这个是什么意思?
cykevin 2009-12-17
  • 打赏
  • 举报
回复
听wartim的!
seberila 2009-12-17
  • 打赏
  • 举报
回复
用个类写进函数再调用它试试

using System;
using System.Text;

public class MessageBox
{
private MessageBox()
{ }

public static void ShowConfirm(System.Web.UI.WebControls.WebControl Control, string msg)
{
Control.Attributes.Add("onclick", "return confirm('" + msg + "');");
}

public static void Show(System.Web.UI.Page page, string msg)
{ }

public static void ShowAndRedirect(System.Web.UI.Page page, string msg, string url)
{ }

public static void ResponseScript(string script)
{ }
}
kolige 2009-12-17
  • 打赏
  • 举报
回复
再顶一下
加载更多回复(12)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧