从面板内部更改面板控制

时间:2017-03-02 13:45:13

标签: c# winforms panel

我正在使用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;纠正"解决方案,而不是仅仅将所有内容更改为公开。

关于如何做到这一点的任何建议?

2 个答案:

答案 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> modifiers

解决方案2(稍好一点):

提供安全实现此类任务的公共方法:

panMain

然后调用这些方法而不是发布完整的面板,这样就可以处理整个面板等等......

答案 1 :(得分:1)

manager.the访问父表单的控件您可以使用UserControldelegate

像这样......

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);
}