问题标签 [childcontrol]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - 如何获取 WPF 中 MainWindow 中所有控件的枚举器或集合?
我有一个 MainWindow,它有 Grids、GroupBoxes 和 TabControls,它们中的每一个都有其他控件作为 Chidren、Content 或 Items。我想知道是否有一种方法可以获得枚举器或 MainWindow 中每个控件的每个人的集合。
这是设计器的示例,看起来像Example.jpg
我在其他帖子中看到了一些示例,但所有示例仅在 MainWindow 中只有子控件的情况下才有效。
我将非常感谢您的帮助。
vb.net - 用于存储子窗体计数的 VB.NET 模块级变量
在本练习中,您将创建一个具有多文档界面的应用程序,该界面由一个父表单和两个子表单组成。
打开项目并添加父窗体 1. 打开CalculateFlooringCostsMDI 目录中的CalculateFlooringCosts 项目。然后,查看地毯成本和硬木成本表格的代码,以便了解它们的工作原理。
向项目中添加一个窗体,并将该窗体的 IsMdiContainer 属性设置为 True 以将其标识为父窗体。调整窗体的大小,使其足以容纳多个子窗体,并使用项目设计器的应用程序页面将启动窗体更改为新窗体。将文件菜单添加到父窗体
将 MenuStrip 控件添加到父窗体。然后,使用菜单设计器将文件菜单添加到父窗体。此菜单应包括四个菜单项,它们显示地毯成本表单、显示硬木成本表单、关闭活动子表单以及退出应用程序。给每个菜单项一个适当的名称,包括菜单和菜单项的访问键,并在 Close 和 Exit 项之间包括一个分隔栏。
为“文件”菜单中每个项目的 Click 事件添加事件处理程序。New Carpeting Costs 和 New Hardwood Costs 项的事件处理程序应创建适当表单的新实例,将父表单设置为当前表单,并显示该表单。Close 项的事件处理程序应该关闭活动的子窗体(如果有的话)。Exit 项的事件处理程序应该从应用程序中退出。
将地毯成本和硬木成本窗体上的退出按钮更改为关闭按钮,并将这些窗体的 StartPosition 属性更改为 WindowsDefaultLocation。
测试应用程序以确保“文件”菜单中的项目按预期工作。将窗口菜单添加到父窗体
在文件菜单的右侧添加一个窗口菜单。然后,将三个项目添加到此菜单中,让用户以级联、垂直或水平布局排列表单。
为 Window 菜单中的每个项目指定一个适当的名称,然后为每个项目的 Click 事件添加一个事件处理程序,以适当地排列子窗体。
设置菜单条的 MdiWindowListItem 属性,以便窗口菜单将显示打开的子窗体的列表。
测试应用程序以确保“窗口”菜单中的项目按预期工作。向父窗体添加工具栏
将 ToolStrip 控件添加到父窗体。然后,在此工具栏上添加两个按钮,上面有“地毯成本”和“硬木成本”文本。请务必为这些按钮分配适当的名称。
为每个按钮的 Click 事件添加一个事件处理程序,该事件处理程序使用关联菜单的 Click 事件处理程序来显示表单。
测试应用程序以确保工具栏按钮正常工作。向父窗体添加状态栏
将 StatusStrip 控件添加到父窗体。然后,将一个 ToolStripStatusLabel 控件添加到状态栏。
向父窗体添加一个模块级变量来存储子窗体的计数,并赋予该变量初始值0。添加代码以在每次打开或关闭新窗体时增加或减小该变量的值。
添加一个名为 DisplayFormCount 的过程,将 ToolStripStatusLabel 控件的 Text 属性设置为“当前显示的子表单数:”,并附加当前表单计数。然后,添加代码以在加载表单时以及每次表单计数更改时调用此过程。
测试应用程序以确保正确显示表单计数。
这是我坚持的第 15 步和第 16 步。
我试过这个:
它在大多数情况下都有效。加载表单时,它显示为 0,然后添加一个表单将使计数增加 1。问题是当我关闭第一个子窗口时,它不会减去。之后所有窗口关闭将计数减少 1,当所有窗口关闭时,它仍然表示计数为 1。
c# - WPF子控件继承
我正在尝试实现一个控件以从 WPF 中继承。
我从来没有使用过 WPF(至少在那个级别)。
所以我需要一些关于如何解决这个问题的最佳实践方向。
我面临的问题是我想要继承的控件有一些需要在控件基类中访问的子控件。
我想在内部使用这些子控件来重用该控件,因为它具有从外部填充子控件的功能。
但由于 WPF 无法使用 xaml 继承控件,因此我无法找到解决方案。
假设我有这个控制权。
在代码隐藏中,Button 用于 Click 事件以及标题文本,我想从继承自此的控件中填充该文本。
并且通过一个函数,TreeView“tvNavContent”被填充了这样的东西:
我想要实现的是在内部及其功能中重用带有 Button 和 TreeView 的 Stackpanel。
我尝试了两件事:
首先,我尝试创建一个模板并将其应用于基类。之后,我只是尝试使用 FindName<>() 函数在基类中加载模板的控件。
这里的问题是,模板是在 InitializeComponent() 之后应用的。
但是在 InitializeComponent() 期间,我已经需要访问权限,以便为从基类继承的控件设置标题的控件标题属性。
之后我尝试在控件的基类中完全实现子控件。
只需在构造函数中创建它们并将它们添加到基类继承的堆栈面板的 Children 属性中。
那确实(在某种程度上)起作用了。
但显然,当这样创建时,控件的行为完全不同。
无论设置如何。我只是无法让控件正确地适合他们的父母。
此外,在主题调整方面,这种方法完全不适合大型项目。
有人可以在这里指导我正确的方向吗?
c# - 将大小更改传递给子控件的问题
我正在开发一个具有如下分层界面的 WinForms 应用程序:
忽略面板 A。旁边我有一个带有 2 个选项卡的 TabControl。在第二个选项卡的 TabPage 上,我在顶部有一些用于过滤数据的控件,在其下方有面板 B,它是一个 FlowLayoutPanel,它显示来自数据库的记录列表。每条记录都显示在面板 C 中,面板 C 包含各种文本字段,具体取决于记录的内容。
加载时 UI 看起来相当不错(但请参阅下面的问题 #2)。我正在努力解决的第一个问题是正确处理主窗口的调整大小事件。当用户拖动主窗口的一侧使其变宽时,主窗体会调整 TabPage 和 Panel B 的大小,然后调用 Panel B 上的方法来调整其内容的大小。TabPage 顶部的控件根据其设置自动均匀地分布在顶部。到目前为止,一切都很好。
面板 B 遍历其 C 面板列表,调整每个面板的宽度。(稍后我将为 C Panel 添加代码以相应地调整每个文本字段的宽度。)
但目前,我遇到了两个可能相关的问题:
我似乎无法让 C 面板改变它们的宽度。我最初希望通过正确的 AutoSize、AutoScroll 等设置,我可以得到我想要的,但是当这不起作用时,我决定添加一个 resize 事件处理程序来获得更多控制权。这目前无法正常工作。
甚至在调整大小之前,我将面板 B 的宽度设置为适合 TabPage,并将面板 B 的 FlowDirection 设置为 FlowDirection.TopDown,但是一旦有足够的 C 面板超过面板 B 的高度,面板 B 变为双倍宽度,其中有第二列 C 面板。我真正想要的是添加一个垂直滚动条来滚动“TopDown”列表。
当我将面板 B 的 AutoScroll 设置为 true 时,我没有得到垂直滚动条(这是我期望的 TopDown 面板);相反,我得到了一个水平滚动条,面板向右增长!所以我关闭了自动滚动。
这是一些相关的代码:
有什么想法/建议吗?