概要

本文介绍如何向 Windows 窗体绑定结构数组。 该示例由一个 Windows 窗体构成;该窗体包含三个文本框和四个命令按钮,文本框用于显示结构成员,按钮用于浏览数组。
返回页首

要求

下面列出推荐使用的硬件、软件、网络结构、技能、知识和所需的 Service Pack。

  • Microsoft Visual C# .NET
  • 对 C# 编程概念的理解达到中等水平

返回页首

设计结构

将要绑定到窗体的结构必须有成员访问器。 结构成员访问器实际等同于类中的 PROPERTY SETPROPERTY GET 结构。 本文示例使用的结构有三个成员(此处仅展示一个)。还提供了一个带参数的构造函数,但它不是必需的。

public struct Guitar
{
private string make;
private string model;
private short year; public Guitar(string Make, string Model, short Year)
{
make = Make;
model = Model;
year = Year;
} public string Make
{
get
{
return make;
}
set
{
make = value;
}
}
}

返回页首

向数组添加结构实例

若要创建实例并将它们添加到数组中,请按下列步骤操作:

  1. 声明该结构类型的变量。
  2. 声明该结构类型的数组。
  3. 创建该结构的实例并将它们添加到数组中。
private Guitar[] arr =new Guitar[3];

arr[0] = new Guitar("Gibson", "Les Paul", 1958);
arr[1] = new guitar("Fender", "Jazz Bass", 1964);
arr[2] = new guitar("Guild", "Bluesbird", 1971);

返回页首

将结构成员绑定到窗体控件

填充 ArrayList 后,可以将对象的单个属性绑定到 Windows 窗体控件。为此,请按照下列步骤操作:

  1. 调用 Textbox DataBindings 属性的 Add 方法。
  2. 传递将要绑定的控件属性、数组名称和结构成员。
textBox1.DataBindings.Add("Text", arr, "Make");
textBox2.DataBindings.Add("Text", arr, "Model");
textBox3.DataBindings.Add("Text", arr, "Year");

返回页首

提供浏览数组的方式

可以使用 CurrencyManager 浏览数组。 为此,请将 CurrencyManager 与窗体的 BindingContext(在此例中即结构数组)关联。

private CurrencyManager currencyManager = null;

currencyManager = (CurrencyManager)this.BindingContext[arr];

CurrencyManager 类有一个 Position 属性,可以通过操纵该属性来迭代数组的所有成员。 通过增加或减小 Position 的当前值,可以在窗体上显示数组的不同成员。

//Move forward one element.
currencyManager.Position++;
//Move back one element.
currencyManager.Position--;
//Move to the beginning.
currencyManager.Position = 0;
//Move to the end.
currencyManager.Position = arr.Length - 1;

返回页首

分步示例

  1. 在 Visual C# .NET 中,新建一个 Windows 应用程序项目。默认情况下将创建 Form1。
  2. 将三个文本框添加到 Form1 并横向排列这些控件。
  3. 将四个按钮添加到 Form1 并横向排列这些控件。
  4. 将 Button1 的 Text 属性更改为 Next
  5. 将 Button2 的 Text 属性更改为 Previous
  6. 将 Button3 的 Text 属性更改为 First
  7. 将 Button4 的 Text 属性更改为 Last
  8. 将下面的代码添加到 Form1 类:
    public struct Guitar
    {
    private string make;
    private string model;
    private short year; public Guitar(string Make, string Model, short Year)
    {
    make=Make;
    model=Model;
    year=Year;
    } public string Make
    {
    get
    {
    return make;
    }
    set
    {
    make = value;
    }
    }
    public string Model
    {
    get
    {
    return model;
    }
    set
    {
    model = value;
    }
    } public short Year
    {
    get
    {
    return year;
    }
    set
    {
    year = value;
    }
    }
    } private Guitar[] arr = new Guitar[3];
    private CurrencyManager currencyManager = null;
  9. 将下面的代码添加到窗体的构造函数中,使之位于 InitializeComponent 调用之后(代码设计者已在此处插入了“TODO:Add any constructor code after InitializeComponent call”这一注释):
    arr[0] = new Guitar("Gibson", "Les Paul", 1958);
    arr[1] = new guitar("Fender", "Jazz Bass", 1964);
    arr[2] = new guitar("Guild", "Bluesbird", 1971); currencyManager = (CurrencyManager)this.BindingContext[arr];
    textBox1.DataBindings.Add("Text", arr, "Make");
    textBox2.DataBindings.Add("Text", arr, "Model");
    textBox3.DataBindings.Add("Text", arr, "Year");
  10. 切换以查看“窗体设置器”。
  11. 双击 Next 并将下面的代码添加到 button1_Click 事件:
    currencyManager.Position++;
  12. 双击 Previous 并将下面的代码添加到 button2_Click 事件:
    currencyManager.Position--;
  13. 双击 First 并将下面的代码添加到 button3_Click 事件:
    currencyManager.Position = 0;
  14. 双击 Last 并将下面的代码添加到 button4_Click 事件:
    currencyManager.Position = arr.Length - 1;
  15. 生成并运行该项目。
  16. 单击这些命令按钮以显示不同的数组元素。注意,如果愿意,您可以编辑这些对象的值。

使用C# .NET 将结构数组绑定到 Windows 窗体的方法的更多相关文章

  1. C++17尝鲜:结构化绑定声明(Structured Binding Declaration)

    结构化绑定声明 结构化绑定声明,是指在一次声明中同时引入多个变量,同时绑定初始化表达式的各个子对象的语法形式. 结构化绑定声明使用auto来声明多个变量,所有变量都必须用中括号括起来. cv-auto ...

  2. C++17结构化绑定

    动机 std::map<K, V>的insert方法返回std::pair<iterator, bool>,两个元素分别是指向所插入键值对的迭代器与指示是否新插入元素的布尔值, ...

  3. MATLAB中的结构数组

    MATLAB中的结构数组 结构数组: 结构是包含一组记录的数据类型,而记录则是存储在相应的字段中.结构的字段可以是任意一种MATLAB数据类型的变量或者对象.结构类型的变量也可以是一维的.二维的或多维 ...

  4. [C语言]贪吃蛇_结构数组实现

    一.设计思路 蛇身本质上就是个结构数组,数组里存储了坐标x.y的值,再通过一个循环把它打印出来,蛇的移动则是不断地刷新重新打印.所以撞墙.咬到自己只是数组x.y值的简单比较. 二.用上的知识点 结构数 ...

  5. 结构数组新发现之直接初始化《leetcode-合并区间》

    leetcode有时候会要求一些奇怪(陌生)的数据形式,刷题因为数据形式卡住了真的很不好... 合并区间里定义了一个Interval的结构数组 struct Interval { int start; ...

  6. mvc数组绑定-jquery ajax

    var list=[];//数组 list[0]=1001; list[1]=1002; list[1]=1003; var json_data = { selected: list}; $.ajax ...

  7. numpy中结构数组

    在c语言中,我们可以使用关键字struct定义结构类型.和c语言一样,numpy也可以创建结构定义,这样可以很方便的读取二进制的C语言结构数组,将其转换为numpy数组对象,假设我们定义的结构数组如下 ...

  8. (C)结构数组

    结构数组 对于大小相同但是类型不同的数组,定义结构体数组对其很有帮组.例如: char *keyword[NKEYS]; int keycount[NKEYS]; 这两个数组大小相同,因此 可以用另一 ...

  9. C#中自定义类数组和结构数组的使用

    如有雷同,不胜荣幸,若转载,请注明 C#中自定义类数组和结构数组的使用 最近在很多项目中发现很多时候给定的数组要实现某个逻辑或处理很是麻烦,一维数组,二维数组,,,等等需要经过n多转换,还不如自己写一 ...

随机推荐

  1. Mac系统下配置JDK及MAVEN环境变量配置

    1. 启动终端Terminal 2.进入当前用户的home目录 输入cd ~ 3.临时授权,sudo su: 输入密码(密码不显示): 4.创建.bash_profile 输入touch .bash_ ...

  2. class文件简介及加载

    Java编译器编译好Java文件之后,产生.class 文件在磁盘中.这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码.JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中, ...

  3. SpringMVC请求使用@PathVariable获取文件名称并且文件名中存在.导致路径被截取的问题

    在SpringMVC中,当使用@pathVariable通过Get请求获取路径名称时,如果路径名称上存在小数点,则获取不到小数点后面的内容,会被Spring截取. 比如我获取某一文件,路径是local ...

  4. Consul实现原理系列文章3: Consul的整体架构

    工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理.在前几篇文章介绍完了Consul用到的两个关键性东西Raft和Gossip之后,这篇文章会讲述Con ...

  5. Discuz! X 插件开发手册

      文件命名规范 Discuz! 按照如下的规范对程序和模板进行命名,请在设计插件时尽量遵循此命名规范: 可以直接通过浏览器访问的普通程序文件,以 .php 后缀命名. 被普通程序文件引用的程序文件, ...

  6. LOCAL_SHARED_LIBRARIES 与 LOCAL_LDLIBS,LOCAL_LDFLAGS的区别

    LOCAL_LDLIBS :链接的库不产生依赖关系,一般用于不需要重新编译的库,如库不存在,则会报错找不到.且貌似只能链接那些存在于系统目录下本模块需要连接的库.如果某一个库既有动态库又有静态库,那么 ...

  7. 集合Set映射一对多(使用xml文件)

    如果持久化类设置了包含实体引用的对象,则需要使用一对多关联来映射集合(Set)元素. 我们可以通过任意一个Set集合来映射这个列表对象. 下面来看看看设置对象的持久化类. 在这种情况下,一个问题可以有 ...

  8. python django -5 进阶

    高级知识点包括: 静态文件处理 中间件 上传图片 Admin站点 分页 使用jquery完成ajax 管理静态文件 项目中的CSS.图片.js都是静态文件 配置静态文件 在settings 文件中定义 ...

  9. OpenCV学习笔记九:opencv_stitching模块

    一,简介: 该库用于图像拼接.

  10. Machine Learning第十周笔记:大规模机器学习

    博客已经迁移到Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Andrew Ng在Cousera上的Machine Learning的第 ...