我正在使用WinForms创建一个应用程序。我有panel
我在其中显示user control
。在user control
内,我有一个button
。当我点击该按钮时,我想清除panel
并显示不同的user control
。我试图使用以下代码:
private void btnCreateOffer_Click(object sender, EventArgs e)
{
var myControl = new WindowsFormsDemo.View.CreateOffer();
MockUpForm.panMain.Controls.Clear();
MockUpForm.panMain.Controls.Add(myControl);
}
这可以直接放在parrent表单中的按钮,但是当我在user control
内部使用时,它会说:
' MockUpForm.panMain'由于其保护级别而无法访问
我想这与私人/公共课有关。但我宁愿让#34;纠正"解决方案,而不是仅仅将所有内容更改为公开。
关于如何做到这一点的任何建议?
答案 0 :(得分:1)
解决方案1(丑陋):
在设计师中公开<Grid Grid.Row="0">
<carusalView:CarouselViewControl Orientation="Horizontal"
InterPageSpacing="10"
Position="0"
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"
x:Name="CarosoulItem"
ShowIndicators="False"
IndicatorsShape="Circle"
PageIndicatorTintColor="Yellow"
CurrentPageIndicatorTintColor="Green">
<carusalView:CarouselViewControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Image}" HeightRequest="200" Aspect="AspectFill"/>
</DataTemplate>
</carusalView:CarouselViewControl.ItemTemplate>
</carusalView:CarouselViewControl>
</Grid>
:
解决方案2(稍好一点):
提供安全实现此类任务的公共方法:
panMain
然后调用这些方法而不是发布完整的面板,这样就可以处理整个面板等等......
答案 1 :(得分:1)
从manager.the
访问父表单的控件您可以使用UserControl
和delegate
Windows窗体(父窗体)代码....
event
用户控制代码...
public Form1()
{
InitializeComponent();
userControl1.CreateOffer += UserControl1_CreateOffer;
}
private void UserControl1_CreateOffer()
{
var myControl = new WindowsFormsDemo.View.CreateOffer();
this.panMain.Controls.Clear();
this.panMain.Controls.Add(myControl);
}