关于WinForm自定义控件添加的问题

 最近在做项目的过程中使用到了导师用VB写的关于图像的类库,即自定义控件,但是在使用过程中总是会遇到无法查看设计器的问题,如图所示。

关于WinForm自定义控件添加的问题_第1张图片

在点击“忽略并继续”后,原来设计的界面上所有控件都消失不见,也就是说再次打开设计器不能看到以前的界面,只能将设计器头文件下所有关于该自定义控件的内容都全部注释才可以,生成时又要重新手动添加,十分不便,后来经过师兄帮助,了解到是由于自定义控件经过这样手动添加的方式没有被注册不能与界面上其他控件相关联,因此会出现此类情况。 解决方法也非常简单,就是参考C#自定义控件的添加方法,网上很多介绍,下文会详细介绍。一下内容分为两部分,其一是介绍自己错误的方法,再者说明一下正确的添加方式。首先,先说一下博主原来的操作方法。在拿到老师的导师写的自定义控件后,其实就是一个dll文件(并未开放源码),这里我的是IMGView.dll。在项目的“引用”下右击选择【添加引用】,点击【浏览】,选择刚才的dll,然后“确定”。接着在设计器的代码下添加私有变量:

private: IMGView::ImageControl^  IMGDisplay;

InitializeComponent函数中添加下面代码:

this->IMGDisplay = (gcnew IMGView::ImageControl());

this->IMGDisplay->Current_OnlyWindowSelect = false;

this->IMGDisplay->Current_Rectangle =System::Drawing::Rectangle(0, 0, 0, 0);

this->IMGDisplay->Dock = System::Windows::Forms::DockStyle::Fill;

this->IMGDisplay->Image = nullptr;

this->IMGDisplay->initialimage = nullptr;

this->IMGDisplay->Location =System::Drawing::Point(0, 0);

this->IMGDisplay->Name =L"imageControl7";

this->IMGDisplay->Origin =System::Drawing::Point(0, 0);

this->IMGDisplay->PanButton =System::Windows::Forms::MouseButtons::Left;

this->IMGDisplay->PanMode = true;

this->IMGDisplay->ScrollbarsVisible = false;

this->IMGDisplay->Selected_Rectangle =System::Drawing::Rectangle(0, 0, 0, 0);

this->IMGDisplay->Size = System::Drawing::Size(120,120);

this->IMGDisplay->StretchImageToFit = false;

this->IMGDisplay->TabIndex = 1;

this->IMGDisplay->ZoomFactor = 1;

this->IMGDisplay->ZoomOnMouseWheel = true;然后绑定容器:

this->panel2->Controls->Add(this->IMGDisplay);

这样就完成了自定义控件的添加。但是使用该方法会导致上述问题。解决方法如下:

将原来错误的方法添加的引用删除,因为不删除的话,使用如下方法添加的控件不能拖进主窗体中。接着打开设计器,在工具箱中空白处右击,选择【添加选项卡】,给新建的选项卡命名。再右键点击新建的选项卡,选择【选择项】,打开选择工具箱项,转到.NET Framework组件下,点击【浏览】,选择上述dll,单击确定即可添加。

关于WinForm自定义控件添加的问题_第2张图片

打开选择工具箱界面的时候可能较慢,因为此时在扫描电脑中的dll,稍等一会就行了。经过上述操作就完成了添加自定义控件。接着就可以像其他控件一样直接拖进去就ok了。好像这个的过程就完成了自定义控件和容器控件之间的绑定以及注册之类的东西,具体我也不太清楚。

注:虽然此方法可以解决设计器打不开的问题,但是我还有问题没有解决,就是依靠这种方法添加的话生成动态库后,在其他程序调用时使用gcnew创建窗体实例的时候还是会有问题。

你可能感兴趣的:(关于WinForm自定义控件添加的问题)