如何在Windows窗体中轻松地将一个控件替换为另一个控件?

时间:2016-02-28 20:24:13

标签: c# .net winforms

第一个问题是在form1顶部我有:

ListViewNF lvnf;

ListViewNFform1中的一个类:

class ListViewNF : System.Windows.Forms.ListView
        {
            public ListViewNF()
            {
                //Activate double buffering
                this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);

                //Enable the OnNotifyMessage event so we get a chance to filter out 
                // Windows messages before they get to the form's WndProc
                this.SetStyle(ControlStyles.EnableNotifyMessage, true);
            }

            protected override void OnNotifyMessage(System.Windows.Forms.Message m)
            {
                if (m.Msg != 0x14)
                {
                    base.OnNotifyMessage(m);
                }
            }
        }

然后在form1构造函数中,我为lvnf变量设置实例,设置大小,位置并将此控件lvnf添加到form1控件。 然后在我的程序中,我在某些地方使用lvnf

但是现在我想要新UserControl调用它lvnf,所以当我将UserControl从工具箱拖到form1设计器时,它将替换lvnf 1}}我创造了。

第一个问题是我删除该行后:

ListViewNF lvnf;

我收到了很多错误,但由于lvnf不存在而无法看到form1设计师我收到错误。

如果我不删除它并拖动新的UserControl,则会为新控件添加另一个名称,我希望它为lvnf。我不想在与lvnf相关的运行时代码中更改任何与设计器中的控件相关的内容。

这是UserControl

的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Pop3_Emails
{
    public partial class ListViewNF : UserControl
    {
        public ListViewNF()
        {
            InitializeComponent();           
        }
    }
}

我应该将lvnf的所有事件都移到UserControl代码吗?或者将它们全部留在form1

主要问题是如何将UserControl用作lvnf。 另外,我需要使用类ListViewNF中的代码。

真是一团糟。一般来说,我想要做的是在lvnf设计器中将ListViewNF form1设为控件,而不是运行时代码中的控件。

1 个答案:

答案 0 :(得分:1)

  1. 将新的UserControl拖到表单上,名称不同(例如x
  2. lvnf重命名为x,要求Visual Studio更新所有引用。忽略名称已存在的警告,项目不会编译。
  3. 删除ListViewNF x声明(现在项目应该再次编译)。
  4. x重命名为lvnf,同时更新所有引用。