版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 在一个窗体中设置另一个窗体的控件属性分类: c#2008-10-13 20:05 1016人阅读 评论(0) 收藏 举报textboxbuttonstringnull 最经有学生问我怎么样在一个窗体中设置另一个窗体的控件属性,问题如下:有两个form. 一个form1,一个form2. 怎么样在form2中用代码设置form1的textbox的属性我考虑了有如下两种方法: 一、1、在form1类中定义一个静态数据成员,来保存当前窗体对象, 如下: public stati
2、c Form1 f1 = null; 2、 然后在form1窗体构造函数中,给上述静态成员初始化,如下: public Form1() InitializeComponent(); p1 = this; &
3、#160;3、 在form2中调用form1,可以通过如下方式: ”Form1.f1”, 例如: Form1.f1.textBox1.Text="你想设置的值" 以上所做的,只是让你能够访问当前form1对象或form2窗体对象,如果想操作控件,可以直接修改控件的成员访问符,即可以把”private”修改成”public”。当然最好的还是可以用增加公有属性的做法,这样不会破坏类本身的封装。 如下: public string Text_Box
4、60; get return textBox1.Text; set textBox1.Text = value; 在form2的button_click事件中添加 Form1.p1.Text_Box = "你想设置的值" 这样就ok了! 源代码如下Fo
5、rm1的代码:1. using System;2. using System.Collections.Generic;3. using System.ComponentModel;4. using System.Data;5. using System.Drawing;6. using System.Linq;7. using System.Text;8. using System.Windows.Forms;9.10. namespace WindowsFormsApplication111. 12.
6、 public partial class Form1 : Form13. 14. public static Form1 p1 = null;15. public Form1()16.
7、160; 17. InitializeComponent();18. p1 = this;19. 20.21. &
8、#160; private void button1_Click(object sender, EventArgs e)22. 23. Form2 fr2 = new Form2();24.
9、0; fr2.Show();25. 26.27. public void setvalue(string a)28. 29. &
10、#160; textBox2.Text = a;30. 31.32. public string Text_Box 33. 34.
11、 get return textBox2.Text; 35. set textBox2.Text = value; 36. 37.
12、160; 38. 39.Form2的代码: 15. using System;16. using System.Collections.Generic;17. using System.ComponentModel;18. using System.Data;19. using System.Drawing;20. using System.Linq;21. using System.Text;22. using System.Windows.Forms;23.24. n
13、amespace WindowsFormsApplication125. 26. public partial class Form2 : Form27. 28. public Form2()29. 30.
14、; InitializeComponent();31. 32.33. private void button1_Click(object sender, EventArgs e)34.
15、60; 35. Form1.p1.Text_Box = "aaaa"36. 37. 38. 二、在Form1中定一个public方法和一个按钮事件(打开Form2)40. /public方法用于修改TextBox的值41. public&
16、#160;void SetTextBox(string strValue)42. 43. this.textBox1.Text = strValue;44. 45.46. /按钮事件47. private void button1_Click(object sender, System.EventArgs e)48. 49. Form2 f = new Form2();5
17、0. f.Tag = this; /把Form1的实例传给Form2实例f的Tag属性51. f.Show();52. 53.Form2中的按钮事件60. private void button1_Click(object sender, System.EventArgs e)61. 62. Form1 f = (Form1)this.Tag;
18、/获取Form1实例63. f.SetTextBox("去修改Form1中的TextBox的值");/调用Form1的public方法修改Form1中TextBox的值64. 65.以上仅供参考,可能还有别的办法。C# 操作内存是如何实现的呢?让我们开始讲解吧:我们先来看看C#中如何操作内存,也就是非托管的数据。这需要引用System.Runtime.InteropServices命名空间。该命名空间下的Marshal的一些静态方法提供了这样的功能:1. Marshal.ReadInt32() 2. /从指定内存地
19、址读取4位 C#操作内存 3. Marshal.PtrToStringAnsi() 4. /从指定内存地址读取字符串C#操作内存 5. Marshal.WriteInt32() 6. /将整数写到指定内存地址 C#操作内存 7. Marshal.WriteByte() 8. /将字符串写到指定内存地址我们来看看具体的代码: 9. using System; 10. using System.Text;
20、;11. using System.Runtime.InteropServices; 12. 13. internal sealed class RCEvent 14. public int Event; 15. public int Flag; 16. public string User; 17. ; 18. /C
21、#操作内存19. internal sealed class RCEventAgent 20. internal static RCEvent Read(IntPtr ptr) 21. RCEvent Event = new RCEvent(); 22. 23. Event.Event = ReadEvent(ptr); 24. Ev
22、ent.Flag = ReadFlag(ptr); 25. Event.User = ReadUser(ptr); 26. 27. return Event; 28. 29. /C#操作内存30. internal static int ReadEvent(IntPtr basePtr) 31. return Marshal.ReadInt
23、32(basePtr); 32. 33. internal static int ReadFlag(IntPtr basePtr) 34. return Marshal.ReadInt32(basePtr,4); 35. 36. internal static string ReadUser(IntPtr basePtr) 37. re
24、turn Marshal.PtrToStringAnsi( 38. new IntPtr(basePtr.ToInt32() + 8); 39. 40. 41. internal static void Write(ClientEvent Event,IntPtr ptr) 42. WriteEvent(ptr,Event.Event); 43. WriteFlag(ptr
25、,Event.Flag); 44. WriteUser(ptr,Event.User); 45. 46. /C#操作内存47. internal static void WriteEvent( 48. IntPtr basePtr,int value) 49. Marshal.WriteInt32(basePtr,value); 50. 51. internal&
26、#160;static void WriteFlag( 52. IntPtr basePtr,int flag) 53. Marshal.WriteInt32(basePtr,4,flag); 54. 55. internal static void WriteUser( 56. IntPtr basePtr,string user) 57. WriteStri
27、ng(basePtr,user,8,40); 58. 59. private static void WriteString( 60. IntPtr basePtr,string value,int offset,int length) 61. int pos = 0; 62. byte bytes = Encoding.Default.GetB
28、ytes(value); 63. while(pos length) 64. if (pos bytes.Length) 65. Marshal.WriteByte(basePtr,offset,bytespos); 66. else 67. Marshal.WriteByte(basePtr,offset,0); 68. 69. pos +;
29、0;70. offset +; 71. 72. /C#操作内存73. 这样我们就可以通过ReadEvent和WriteEvent直接在c#中处理该结构体。或者通过 ReadXXX() 和 WriteXXX() 直接修改其字段。74. public void DoSomething(IntPtr ptr) 75. RCEvent Event = RCEventAgent.Read(ptr);
30、76. Event.Flag +; 77. RCEventAgent.Write(ptr, Event); 78. 79. / 或者以下代码 80. / RCEventAgent.WriteFlag( ptr, RCEventAgent.ReadFlag(ptr) + 1 ); 81. C+中则可以直接将结构体地址传给C#:82. #using msco
31、rlib.dll 83. #using CuteSuProc.dll 84. 85. void SomeMethod(RCEStruct* pEventStruc) 86. MyCSharpDll:DoSomething(pEventStruc); 87. C#操作内存读写方法是什么呢?让我们来看看具体的实例实现:1. using System.Runtime.InteropServices; 2.
32、using System.Text; 3. public class Function 4. 5. /C#操作内存读写方法6. public static byte PtrToByte( int Ptr ) 7. 8. byte b = Marshal.ReadByte( ( IntPtr ) Ptr ); 9. 10. retur
33、n b; 11. 12. 13. public static char PtrToChar( int Ptr ) 14. 15. byte b = Marshal.ReadByte( ( IntPtr ) Ptr ); 16. 17. return ( char ) b; 18. 19.
34、20. public static short PtrToShort( int Ptr ) 21. 22. short b = Marshal.ReadInt16( ( IntPtr ) Ptr ); 23. 24. return b; 25. 26. /C#操作内存读写方法27. public static ushort PtrTo
35、UShort( int Ptr ) 28. 29. ushort b = ( ushort ) Marshal.ReadInt16( ( IntPtr ) Ptr ); 30. 31. return b; 32. 33. 34. public static int PtrToInt( int Ptr )
36、 35. 36. int b = Marshal.ReadInt32( ( IntPtr ) Ptr ); 37. 38. return b; 39. 40. 41. public static uint PtrToUInt( int Ptr ) 42. 43. uint b = ( uint
37、;) Marshal.ReadInt32( ( IntPtr ) Ptr ); 44. 45. return b; 46. 47. 48. public static long PtrToLong( int Ptr ) 49. 50. long b = Marshal.ReadInt64( ( IntPtr ) Ptr ); 51. 52. return b; 53. /C#操作内存读写方法54. 55. public static ulong PtrToULong( int Ptr ) 56. 57. ulong b = ( ulong ) Marshal.ReadInt64( ( IntPtr ) Ptr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版二年级下册数学第二单元-表内除法(一)-测试卷加答案(A卷)
- 人教版七年级下册信息技术 9.1图像叠加 教案
- 人教版五年级下册数学期末测试卷附解析答案
- 冀教版数学六年级下学期期末质量监测试题附答案(b卷)
- 苏教版六年级上册数学第三单元-分数除法-测试卷含完整答案(典优)
- 小学五年级下册数学期末测试卷及参考答案(达标题)
- 人民币的简单计算(教案)-2023-2024学年人教版数学一年级下册
- 《负数》选择题50道专项练习及答案【易错题】
- 部编人教版《道德与法治》六年级下册期末测试卷含完整答案(各地真题)
- 青岛版六年级下册数学期末模拟卷附参考答案【典型题】
- 加油站风险分级台账2020
- 施工晴雨表6(详细版本)
- 车辆管理类考试题库
- 招标文件评审表
- 日本钢铁产品牌号表示方法说明
- 关于成立质量管理组织机构通知
- 五年级脱式计算简便计算
- YD_T 3977-2021 增强的V2X业务应用层交互数据要求_(高清版)
- (完整版)指数对数运算经典习题及答案
- 深基坑工程监理实施细则.doc
- 金狮子章注释
评论
0/150
提交评论