gpt4 book ai didi

c# - 从控件中转换窗口

转载 作者:行者123 更新时间:2023-11-30 12:11:25 27 4
gpt4 key购买 nike

我有一段简单的代码:

private void btnAdd_Click(object sender, EventArgs e)
{
if (AskForSaveBeforeClose(null))
{
LoadForm<Soles>(btnAdd, "Add");
}
}

btnAdd 目前是我唯一具有 ToolStripDropDown 类型的按钮。所有其他按钮都是 ToolStripButton 类型。如您所见,我将此按钮作为 e 参数传递给方法,并且在许多其他方法中使用 ToolStripButton 作为参数类型。我不想过多地破坏我的代码,我认为应该可以将 btnAdd 形式的 ToolStripDropDownButton 转换为 ToolStripButton 并解决我的问题问题。可以这样做吗?如果不能,您是否有其他想法来保留我的代码。我需要下拉功能,但目前可以接受任何解决方法。

这是继承层次结构:

System.Object System.MarshalByRefObject 
System.ComponentModel.Component
System.Windows.Forms.Control
System.Windows.Forms.ScrollableControl
System.Windows.Forms.ToolStrip
System.Windows.Forms.MenuStrip
System.Windows.Forms.StatusStrip
System.Windows.Forms.ToolStripDropDown
System.Windows.Forms.ToolStripDropDownMenu
System.Windows.Forms.ContextMenuStrip

最佳答案

您不能将 ToolStripDropDownButton 转换为 ToolStripButton,因为前者继承自后者。但是,两者都继承自 ToolStripItem,因此您可以改用它。

你说你做:

var button = ((btnSoles as ToolStripItem) as ToolStripButton);

但是,这不会做你想做的事。首先,btnSoles 始终是 ToolStripItem,因此您应该改用直接转换:

var item = (ToolStripItem)btnSoles;

然后,如果您真的需要 ToolStripButton 而不是 ToolStripItem 提供的功能,那么您才应该使用 作为:

var button = btnSoles as ToolStripButton;

如果 btnSoles 不能转换为 ToolStripButton,这将返回 null。如果它是一个 ToolStripDropDownButton,如您所说,那么它不能被强制转换,结果将为 null。请注意,双重转换不是必需的,而且通常很少需要。

关于c# - 从控件中转换窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15436029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com