首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >克隆GUI组件

克隆GUI组件
EN

Stack Overflow用户
提问于 2012-03-07 01:51:30
回答 2查看 3.8K关注 0票数 3

我需要一些帮助,因为我是C#的新手。我基本上是在尝试克隆一个datagridview组件属性(行/列内容不同)。

基本上我有一个选项卡页控件...在运行时,如果用户想要添加另一个表,则会创建一个新页面,其中的新datagridview具有与现有datagridview组件相同的属性:

代码语言:javascript
运行
复制
string newpagetitle = "tab_page" + (tab_control01.TabCount + 1);
TabPage newTab_page = new TabPage(newpagetitle);

DataGridView clonedDGV = new DataGridView();

clonedDGV = this.dataGridView1; //need to clone this
clonedDGV.Name=("DataGridView" + tab_control01.TabCount + 1);
clonedDGV.DataSource = exam_Results_Table;
newTab_page.Controls.Add(clonedDGV);
this.tab_control01.TabPages.Add(newTab_page);
EN

回答 2

Stack Overflow用户

发布于 2012-03-07 02:05:28

你肯定不想这样做:

代码语言:javascript
运行
复制
clonedDGV = this.dataGridView1;

这行代码不能克隆dataGridView1。相反,它只获取变量clonedDGV,并将其指向dataGridView1所指向的同一网格对象。这意味着如果您对clonedDGV进行了任何更改,您也将对dataGridView1进行更改。请记住,在C#中,(几乎)所有对象变量实际上都是对对象的引用,而不是对象本身。

在C#中没有内置的方法来克隆DataGridView。如果你想做的就是将结构复制到一个新的网格中,那么你可以这样做:

代码语言:javascript
运行
复制
DataGridView clonedDGV = new DataGridView();
foreach(DataGridViewColumn col in this.dataGridView1.Columns) {
    clonedDGV.Columns.Add(new DataGridViewColumn(col.CellTemplate));
}

这将为您提供一个具有相同结构的新网格,但没有任何数据。如果您还想复制数据,则循环遍历原始网格中的行,并将新行添加到新网格中。

如果还有其他属性需要复制,只需在新网格上逐个设置即可。

编辑:如果你只关心克隆原始网格的属性,那么你必须自己完成所有的工作。如果这是你计划经常做的事情,我建议你创建一个扩展方法,并保持你所有的逻辑。如下所示:

代码语言:javascript
运行
复制
public static class Extentions {
    public static DataTable Clone(this DataGridView oldDGV) {
        DataGridView newDGV = new DataGridView();

        newDGV.Size = oldDGV.Size;
        newDGV.Anchor = oldDGV.Anchor;

        return newDGV;
    }
}

一旦创建了它,你可以这样调用它:

代码语言:javascript
运行
复制
DataGridView clonedDGV = dataGridView1.Clone();

您仍然需要为每个对您重要的属性编写一行代码,但至少您的逻辑将在一个地方。

票数 4
EN

Stack Overflow用户

发布于 2012-03-07 02:00:06

而不是这个clonedDGV = this.dataGridView1,您需要遍历属性并逐个复制它们。否则,您将把clonedDGV重置为对旧数据网格的另一个引用。

注意:通常不可能“克隆”对象,除非它被设计为克隆对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9589149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档