zoukankan      html  css  js  c++  java
  • C#中使用自定义消息

           C# WinForm编程中,你是否遇到过这样的问题,在主窗口Form1中点击按钮,弹出一个子窗口Form2,你希望在Form2中调用Form1的函数,改变Form1的显示,却发现Form1不听话,达不到预期效果。有的人说我调试了的,那段函数确实执行了,怎么还是没有显示呢?

    案例:

    在winform中,我在点击from1的一个按钮,弹出from3执行一个函数,其实form3就是弹出一个自制的密码输入框但是呢。然后我再from3中调用
        if (password == PassWord)
                {
                    comfirm = true;
                    form1.updateMac(row, col);
                    this.Close();
                }
    在updateMac(row,col)中我有个dataGridView1.Rows[row].Cells[col].Style.BackColor = Color.Green;但是颜色死活不变,特别奇怪,放在form1的其他函数里就能变,就是凡在这个form3调用form1的函数里,不能变色,是为什么啊

          其实Form1不听话是必然的,你在Form2中new Form1(),这样新新建了一个窗口对象,和本身的父窗口是两个不同的对象,你改变对象A怎么能期望对象B也变化呢?

          那有没有什么办法可以实现我们预期的效果呢?

          有的,那就是利用win32函数,使用自定义消息,做C++的人对这个应该不陌生,下面就给大家讲一下C#自定义消息。

    消息发送方

    一、引入命名空间

    二、消息定义

    三、自定义结构体

    四、重写消息发送函数


     

    五、获取窗体句柄的函数引入

    六、消息发送


     

    消息接收方

    一、引入命名空间

    二、消息定义

    三、重写窗体的消息处理函数

          


     如上,我们就实现了一个C#自定义消息的程序,贴上一个程序下载地址:http://download.csdn.net/detail/bdstjk/2707423

    不知道大家在C#中有没有更好的实现方法。

    经过研究,C#确实有方法可以更简单的实现这个功能,请看C# 委托实例(跨窗体操作控件)

     

    最后再给大家介绍一种最简单的C#跨窗体操作

     

    程序运行示意:

         

  • 相关阅读:
    2.创建第一个启用了服务和数据驱动的silverlight5应用程序
    1.搭建siverlight 5开发环境
    读《C程序设计语言》笔记1
    读《C程序设计语言》笔记2
    郑州轻工业大学OJ 2834.小凯的书架 题解 线段树二分
    洛谷P3834 【模板】可持久化线段树 2/POJ2104 Kth Number 题解 主席树
    洛谷P6883 [COCI20162017#3] Kroničan 题解 状压DP入门题
    CF1586D. Omkar and the Meaning of Life 题解 纪念一下第一道AC的交互题
    冒泡事件
    JavaScript 对象是词典
  • 原文地址:https://www.cnblogs.com/bdstjk/p/2519884.html
Copyright © 2011-2022 走看看