Tag: 用户控件

将事件从asp.net用户控件公开到容器Web表单页面

如何实际将asp.net usercontrol [ascx文件]中的抽象事件暴露给容器webforms页面。 这是我的情景, 我创建了一个webforms usercontrol一个ascx文件,并将一个带有validation器的数据绑定复选框列表进行validation(我知道这可以完成webforms本身为什么用户控制你问,但这是一个场景) 现在我想将一个事件暴露给名为OnValidating的容器页面,该页面将产生validation结果 该活动的签名如下: public delegate void Validating(object source,EventArgs e); public event Validating OnValidating; public void InvokeOnValidating(EventArgs e) { Validating handler = OnValidating; if (handler != null) handler(this, e); } 根据msdn文档,页面框架处理事件订阅和取消订阅。 所以我需要做的就是在validation失败时调用事件。 我很高兴,但是, 所有其他公共财产都没有在属性窗口中显示该事件 当我键入usercontrolid.时,为什么地狱是我的event invoker[InvokeOnValidating] , event delegate[Validating]在intellisense列表中显示usercontrolid. 以及event[OnValidating] 。 我只希望暴露事件。 我还可以允许页面订阅在usercontrol中创建的事件TextboxChanged吗? 如果是这样,请给我代码。 注意:我希望看到更多的代码而不是冗长的解释

如何创建inheritance自TextBox的类

我想创建一个inheritanceTextBox的自定义TextBox类,并覆盖onKeyDown事件,以便在按下Enter键时生成Tabfunction。 这个问题有重复,但我发现的答案都没有意义,所以我想开一个新的讨论。 我不想从UserControlinheritance而是从TextBoxinheritance…这真的很难吗? 我似乎无法找到关于如何做到这一点的直接教程或示例。 像这样的东西: public partial class CustomTextBox : TextBox { public CustomTextBox() { this.KeyDown += customKeyDown; } void customKeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { SendKeys.Send(“{TAB}”); } } } 请记住,我对使用UserControls或CustomControls的经验很少,而且很久以前所以我忘记了关键的事情

C# – 从派生的方法中隐藏UserControl类的所有方法

我有一个自定义用户控件。 通常它inheritanceUserControl类。 但通过这种方式,它inheritance了UserControl所有公共方法和属性。 但我想隐藏所有这些并实现我自己的一些方法和属性。 假设我有一个名为CustomControl的自定义控件。 public class CustomControl : UserControl 当我创建CustomControl的实例时: CustomControl cControl = new CustomControl(); 当我输入cControl. intellisense为我提供了从UserControl派生的所有方法和属性。 但我想只列出我在CustomControl类中实现的。 谢谢

将值从Usercontrol传递到Form

我用textBox创建了一个usercontrol1。 在我的表单中,我添加了一个usercontrol(带有textBox的usercontrol1)和一个textBox。 我已经知道如何将值从Form传递给Usercontrol。 Form Code public string ID { get { return textBox1.Text; } } private void textBox1_TextChanged(object sender, EventArgs e) { userControl11.ID = ID; } Usercontrol Code public string BorrowerID { set { textBox1.Text = value; } } 但是不知道如何将Usercontrol的textBox中的值传递给Form的文本框? 我找到了如何从usercontrol关闭表单。 ((Form)this.TopLevelControl).Close(); 更改父级颜色 this.ParentForm.BackColor= Color.Red; 我将如何实现类似这样或其他方法来将值从usercontrol传递到表单? ((Form)this.TopLevelControl).ID = ID; 要么 this.ParentForm.ID= ID;

asp.net c#生成用户控制参数

ASP.net对我来说是新手,我已经交了一个现有项目。 我写了SO: Asp.Net WebForms – 如何将ViewData作为param传递给用户控件,但由于没有响应,我不能说清楚。 我想做这个: Consignment.ascx: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl” %> <% var applicationId = ViewData["NoiId"]; var applicationSpecies = ViewData["applicationSpecies"] as HashSet; // Same as the JS var applicationSpecies but from server – needed to build page %> … <div id="_grid” style=”display: none;”> <uc:speciesgrid runat="server" species=/> 但它在<uc:speciesgrid 上<uc:speciesgrid了: {“Server tags cannot contain constructs.”} […]

无法动态地向页面添加控件

我正在为数据读取器中提取的每条记录添加一个用户控件,这是基本循环: while (dr.Read()) { ImageSelect imgSel = new ImageSelect(dr[“Name”].ToString()); myPanel.Controls.Add(imgSel); } 问题是没有控件添加到页面,我检查html输出,并有我的面板,其中没有任何内容。 我甚至逐步调试了调试器中的代码,并validationmyPanel.Controls在每个循环中都添加了一个控件,计数为6,没有错误,但是它们不会显示在页面上。 我在Page_Init和Page_Load事件中运行上面的代码,两者都有相同的结果。 编辑:好的所以我已经切换到使用LoadControl(“…. ascx”)来获取我的控件实例,现在正在运行。 但最初我也是通过控件构造函数传递数据..这仍然可行或者我只需要通过get / sets设置它们吗? 编辑2:感谢Freddy指出LoadControl有一个过载,你可以传递构造函数参数,请参阅接受的答案。 编辑3:使用和不使用构造函数尝试此方法。 我发现最好只使用setter来获取我希望控件拥有的任何属性,而不是尝试将传入的对象数组用于构造函数。

在WPF中将TabItem转换为UserControl

我的主屏幕上有一个Tab Control。 它有不同的标签项。 例如: Animals Calfs 等等.. 这是标签的设计时预览: 每个选项卡项控件都inheritance自WorkSpaceViewControl (从UserControl派生的抽象类) 正如您所看到的,有一个刷新按钮来刷新控件(重新加载它的数据网格成员) 刷新按钮后面的代码是: private void buttonRefresh_Click(object sender, RoutedEventArgs e) { //var x = mainTab.SelectedItem as TabItem; //MessageBox.Show(x.Header.ToString());//shows the header //var t = x.Content as TextBlock; //MessageBox.Show(t.Text); var ctrl = mainTab.SelectedItem as TabItem; var myCtrl1 = (WorkSpaceViewControl)ctrl; myCtrl1.Refresh(); } Refresh()是WorkSpaceViewControl类中的虚方法,并在后续类中重写。 每当我调用该代码时,它都会让我在编译时出错。 我已经尝试了很多种方法:隐式,显式( 你可以在上面的评论代码中看到一些尝试 )。 这是我试图实现的显式转换代码(但失败了): public static […]

将UserControl转换为自定义控件

下面的UserControl运行良好,但我想更容易更改样式。 我尝试过的一件事是将其转换为自定义控件,但我仍然坚持基础知识如何在处理属性更改的静态方法中设置ToolTip(参见下文) 另一件事我试图将Style转换为ResourceDictionary中的通用按钮样式,但这是这个问题的主题 如何在我的子类Button中设置ToolTip? 干杯 UserControl XAML: _Add New Subject UserControl代码背后: public partial class AddNewItemButton : UserControl { public AddNewItemButton() { InitializeComponent(); } public static readonly DependencyProperty SubjectProperty = DependencyProperty.Register( “Subject”, typeof (string), typeof (AddNewItemButton), new FrameworkPropertyMetadata(OnSubjectChanged)); public string Subject { get { return (string) GetValue(SubjectProperty); } set { SetValue(SubjectProperty, value); } } private static […]

用户控件之间的ASP.NET事件委派

在ASP.NET页面上提供以下控件层次结构: 页 HeaderControl( 用户控件 ) TitleControl( 服务器控件 ) TabsControl( 用户控件 ) 其他控件 我正在尝试在TitleControl中引发一个事件(或一些通知),它会冒泡到Page级别。 然后,我想(可选) 在Page codebehind注册一个事件处理程序,它将采用EventArgs并修改上面示例中的TabsControl。 需要注意的重要一点是,这个设计允许我将这些控件放到任何页面中,并在事件处理程序连线时使整个系统无缝地工作。 该解决方案不应该涉及对FindControl()的调用,因为它成为一个强大的关联。 如果在包含的页面中没有定义处理程序,则事件仍由TitleControl引发但不处理。 我的基本目标是使用基于事件的编程,以便我可以将用户控件彼此分离。 TitleControl中的事件仅在某些情况下引发,这似乎是(在我的脑海中)首选方法。 但是,我似乎无法找到一种干净利落的方法。 以下是我的(差)尝试: 使用HttpContext.Current.Items 将EventArgs添加到TitleControl上的Items集合中,并在TabsControl上将其拾取。 这可行,但由于两个控件之间的连接不明显,因此从根本上难以破译。 使用reflection 而不是传递事件,直接在TitleControl中查找容器页面上的函数,如: Page.GetType().GetMethod(“TabControlHandler”).Invoke(Page, EventArgs); 这将起作用,但方法名称必须是一个常量,所有Page实例必须逐字定义。 我确信我过度思考这个问题并且必须有一个更漂亮的解决方案使用委托,但我似乎无法想到它。 有什么想法吗?

如何在inheritance的TextBox中保留Font?

我正在使用以下代码来获取未绘制其边框的TextBox: public partial class CustomTextBox : TextBox { public CustomTextBox() { InitializeComponent(); SetStyle(ControlStyles.UserPaint, true); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); int borderWidth = 1; ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.Transparent, borderWidth, ButtonBorderStyle.Solid, Color.Transparent, borderWidth, ButtonBorderStyle.Solid, Color.Transparent, borderWidth, ButtonBorderStyle.Solid, Color.Transparent, borderWidth, ButtonBorderStyle.Solid); } } 我似乎错过了OnPaint()内部的东西,因为我的Font不再是textBox的默认字体(也许我必须覆盖另一个事件)。 当检查CustomTextBox.Font属性时,它向我显示默认的“Microsoft SansSerif in 8,25”,但在我的textBox中键入文本时,Font肯定看起来更大更粗。 希望你能帮我! 问候, INNO [编辑] 我应该提一下,如果我不重写OnPaint,我的CustomTextBox的字体是正确的。 只有当覆盖OnPaint我的字体不正确时(键入文本时字体更大,似乎是粗体)。 所以我认为我必须做一些事情来在OnPaint中正确初始化字体(但ATM我不知道如何做到这一点)。