当前位置: 首页 > 编程语言 > C#

VisualStudio设计时属性-表单列表下拉列表Share

时间:2023-04-10 11:28:12 C#

VisualStudio设计时属性-表单列表下拉列表[编辑]明确地说,我知道如何通过反射获取表单列表。我更关心设计时属性网格。我有一个带有Form类型公共属性的用户控件。我希望能够在设计时从下拉菜单中选择一个表单。我想从设置的命名空间填充表单下拉列表:UI.Foo.Forms如果您拥有Control的公共属性,这将起作用。在设计时,该属性将自动用窗体上的所有控件填充下拉列表供您选择。我只想用命名空间中的所有形式填充它。我应该怎么办?我希望我说得足够清楚,以免造成混淆。如果可能的话,我正在寻找一些代码示例。当我有其他截止日期要求时,我尽量避免在这上面花太多时间。感谢您的帮助。您可以通过反射轻松获取类:varformNames=this.GetType().Assembly.GetTypes().Where(x=>x.Namespace=="UI.Foo.Forms").Select(x=>x.姓名);假设您从与表单相同的程序集中的代码中调用它,您将在“UI.Foo.Forms”命名空间中获得所有类型的名称。然后,您可以在下拉列表中显示它,并最终实例化用户通过反射再次选择的任何一个:Activator.CreateInstance(this.GetType("UI.Form.Forms.FormClassName"));[编辑]设计时间添加代码:在您的控件上,您可以创建一个表单属性:[Browsable(true)][Editor(typeof(TestDesignProperty),typeof(UITypeEditor))][DefaultValue(null)]publicTypeFormType{得到;放;}引用必须定义的编辑器类型。该代码非常不言自明,通过一些调整,您可以完全按照您的需要生成代码。公共类TestDesignProperty:UITypeEditor{公共覆盖UITypeEditorEditStyleGetEditStyle(ITypeDescriptorContext上下文){返回UITypeEditorEditStyle.DropDown;}publicoverrideobjectEditValue(ITypeDescriptorContextcontext,IServiceProviderprovider,objectvalue){varedSvc=(IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));列表框lb=new列表框();foreach(vartypeinthis.GetType().Assembly.GetTypes()){lb.Items.Add(类型);}if(value!=null){lb.SelectedItem=value;}edSvc.DropDownControl(lb);值=(类型)lb.SelectedItem;返回值;当通过单击选择项目时,下拉列表不会关闭,因此这可能有用:AssigningclickeventhandlingtoalistboxProgramandaddeventhandlingfunctions以上是C#学习教程:VisualStudioDesignTimeAttributes–Form列表下拉菜单。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicclassTestDesignProperty:UITypeEditor{//...IWindowsFormsEditorServiceeditorService;公共覆盖对象EditValue(ITypeDescriptorContext上下文,IServiceProvider提供者,objectvalue){//...editorService=edSvc;//所以可以在点击事件处理程序中引用ListBoxlb=newListBox();lb.Click+=newEventHandler(lb_Click);//...}voidlb_Click(objectsender,EventArgse){editorService.CloseDropDown();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: