C#点击button如何弹出里一个窗体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#点击button如何弹出里一个窗体相关的知识,希望对你有一定的参考价值。

用这个代码
private void button5_Click(object sender, EventArgs e)

Form1 myForm = new Form4();
myForm.ShowDialog();

提示错误

无法将类型“中国历史数据库.Form4”隐式转换为“中国历史数据库.Form1”

1、问题出在这个赋值语句上面:

Form1 myForm = new Form4(); 

myForm是Form1类型的变量,给它赋值一个Form4类型的实例,又没有相应类型转换操作,就会出现“无法隐式转换类的错误”。

改正的方法:

Form1 myForm = new Form1();

Form4 myForm = new Form4();

2、C#类型转换:

C#不同类型变量之间不充许直接赋值,但是可以通过类型转换来解决这一问题。

如字符串赋值给整型变量的类型转换: 
int num = int.Parse("123");  int num1 = Convert.ToInt32("234");

题中如果Form1和Form4是各自独立的类型,那么按上面改正即可。

特例是如果Form1是Form4的父类,这种情况可以通过强制类型转换来解决问题。

Form1 myForm = (Form1) new Form4();

扩展资料:

在 C# 中,可以执行以下几种类型的转换:

1、隐式转换:由于该转换是一种类型安全的转换,不会导致数据丢失,因此不需要任何特殊的语法。 示例包括从较小整数类型到较大整数类型的转换以及从派生类到基类的转换。

2、显式转换(强制转换):显式转换需要强制转换运算符。 在转换中可能丢失信息时或在出于其他原因转换可能不成功时,必须进行强制转换。 典型的示例包括从数值到精度较低或范围较小的类型的转换和从基类实例到派生类的转换。

3、用户定义的转换:可以定义一些特殊的方法来执行用户定义的转换,使不具有基类和派生类关系的自定义类型之间可以显式和隐式转换。 有关详细信息,请参阅转换运算符。

4、使用帮助程序类进行转换:若要在非兼容类型之间转换(例如整数和 System.DateTime 对象之间,或十六进制字符串和字节数组之间),可使用 System.BitConverter 类、System.Convert 类和内置数值类型的 Parse 方法(例如 Int32.Parse)。

参考资料:

microsoft.Docs C#类型转换



参考技术A

弹出Form1:

private void button5_Click(object sender, EventArgs e)

Form1 myForm = new Form1()

myForm.ShowDialog();

弹出Form4:

private void button5_Click(object sender, EventArgs e)

Form4 myForm = new Form4();

myForm.ShowDialog();

扩展资料:

有弹出就有关闭,想要关闭窗体的话可以这样

1、close():指仅关闭当前窗体,如果不是主窗体(包含主线程的窗体,并非MDI窗体)的话,是无法退出整个程序的。如果有托管线程也无法退出。 

此方法会调用 dispose() 方法,所以它会自动的帮我们释放内存,除了该窗体是多文档应用程序(MDI)的一部分并且此窗体不可见或此窗体是“模态”窗体。

close() 方法执行的时候会触发两个事件:

Form_Closing 和 Form_Closeed 事件,Form_Closing 是在窗体关闭时执行,Form_Closed 是在窗体关闭之后执行,所以如果想取消关闭窗体,可以在 Form_Closing 事件里取消。

2、Application.Exit(): 强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出。

3、Application.ExitThread(): 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题。

4、System.Environment.Exit(0); 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。 参数0:代表程序正常退出;参数1:代表程序非正常退出。

参考技术B Form1和Form4是两个不同的窗体,不可以用Form4去创建Form1
代码:
弹出Form1:
private void button5_Click(object sender, EventArgs e)

Form1 myForm = new Form1();
myForm.ShowDialog();

弹出Form4:
private void button5_Click(object sender, EventArgs e)

Form4 myForm = new Form4();
myForm.ShowDialog();
本回答被提问者采纳
参考技术C 你弹出另外一个窗体,至少你也要等号前后的类型一致啊。。
你后面的ShowDialog();就已经是弹出一个窗体了。。还可以用show弹出窗体的。。只不过第一个是模式对话框,后面一个是非模式对话框的。
参考技术D Form1 和Form4 不是同一类型,不能这样写
Form1 myForm = new Form1();

Form4 myForm = new Form4();追问

可是我的确想弹出另外一个窗体怎么办呢

如何在c#中实现单击一个按钮后,再在窗体内点击一次鼠标,把该按钮移动到第二次点击的位置?

rt,新手求教。
private void button1_Click(object sender, EventArgs e)

//如何添加一次单击触发的事件?

参考技术A 楼上说的可以
具体点,在你的class From1中,构造函数上面加一个
bool isClick=false;
在button1_Click函数中
isClick=true;
为窗体添加一个Click响应消息
在From1_Click函数中
if(isClick)

button1.Location=new Point(e.X-button1.Size.Width/2,e.Y-button1.Size.Height/2);
isClick=false;
追问

方法可行,但是我实际上想继承一个带有这个功能的button怎么写?

追答

那样也行啊 就是在继承的类中加一个移动的方法,最终还是要在窗体的单击函数中调用这个方法,毕竟你点的是窗体,无法引起按钮的任何消息响应,只能引起窗体的单击消息

参考技术B 定义一个全局变量isClick=false
button1_Click里isClick=true
form_Click里
if isClick=true
按钮设置新位置
isClick=false追问

方法可行,但是我实际上想继承一个带有这个功能的button怎么写?这种方法不行。

追答

你的要求是点击窗体,按钮移动到点击的位置,这涉及到窗体和点击的位置
光靠button自身的属性是无法实现的

你可以继承一个button类,里面增加一个移动到新位置的方法
当点击form的时候调用这个方法

参考技术C winform中还是asp.net中?追问

windows form

追答public partial class Form1 : Form
    

        /// <summary>
        /// 是否可移动
        /// </summary>
        private Boolean IsMove = false;

        public Form1()
        
            InitializeComponent();
        

        private void Form1_MouseClick(object sender, MouseEventArgs e)
        
            if (e.Button == MouseButtons.Right || e.Button == MouseButtons.Left)
            
                Point p = MousePosition;//获取位置
                //其他需要执行的代码
                if (IsMove)
                
                    this.button1.Location = p;    
                
                
            
        

        private void button1_Click(object sender, EventArgs e)
        
            IsMove = true;
        
    

找到窗体的MouseClick事件,双击,在这个事件下,下 button移动的代码!

已试过,试的时候,请将窗体最大化!

以上是关于C#点击button如何弹出里一个窗体的主要内容,如果未能解决你的问题,请参考以下文章

c#如何单击按钮显示另一个窗体

c# winform 比如说一个窗体中有很多个button ,当鼠标在窗体中点击的时候如何得到这个button的id

C#(Winfrom)窗体传值问题(子窗体回传值给父窗体)

c#窗体假死

Unity,NGUI如何像GUI一样,点击按钮后弹出一个窗体呢

C# winform窗体有个button按钮,我想鼠标点击它不松一直会触发一个事件?是button的哪个事件?