C# 다른 Form에서 패널 색상 바꾸기

안녕하세요 저는 지금 Form1에서 Form2의 패널 색상을 바꾸려고 하는데요… 이게 잘 되지가 않습니다.
private void darkModeToggle_CheckedChanged(object sender, EventArgs e)
{
if(darkModeToggle.Checked == true)
{
main.ChangePanelColor(Color.AliceBlue);
}
else
{
main.ChangePanelColor(Color.RoyalBlue);
}
}
위에 것이 form1이고여
public void ChangePanelColor(Color sidePanel)
{
mainSidePanel.FillColor2 = sidePanel;
}
요것이 form2입니다.
Form1에서 Form2의 인스턴스를 생성하고 바로 Form1.Panel.BackColor이라고 하면 잘 안되어서
Form2에 함수를 만들어서 사용하려고 했습니다. 근데 잘 되지 않아요 ㅠㅠㅠ 제발 알려주세요

Form1 인스턴스에서 Form2 인스턴스의 특정 컨트롤에 접근할 수 없는 것은, 해당 컨트롤의 Modifiers 속성이 기본 private이기 때문입니다.

image

public으로 변경하면 접근할 수 있게 되나 외부에서 내부의 컨트롤에 직접 접근하는 것은 일반적으로 지양하는 방식이므로 메소드를 만들어 접근하게 한 것은 잘 한 것 같은데요, 왜 안되는 것일까요?

먼저, Panel에 FillColor2라는 속성이 없습니다. FillColor2라는 속성을 만드신 것 같은데 이게 오동작하는게 아닐까 의심해보구요,

제가 간단히 테스트 한 결과 잘 동작합니다.

image

Form1.cs

    public partial class Form1 : Form
    {
        private Form2 main;


        public Form1()
        {
            InitializeComponent();

            main = new Form2();
            main.Show();
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (darkModeToggle.Checked == true)
            {
                main.ChangePanelColor(Color.AliceBlue);
            }
            else
            {
                main.ChangePanelColor(Color.RoyalBlue);
            }
        }
    }

Form2.cs

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public void ChangePanelColor(Color sidePanel)
        {
            mainSidePanel.BackColor = sidePanel;
        }
    }
3개의 좋아요

성의 있는 답변 감사합니다! 저는 setting에서 MainForm의 패널 색상을 바꾸려고 했는데요… 디모이님께서는 Form2.Show()를 하셨는데 이것이 꼭 있어야지 패널 색상을 바꿀 수 있는건가요?? Show를 안하고 바꿀 수는 없나요?? 아 그리고 FillColor2는 제가 Guna2 UI를 사용하고 있어서 Guna2의 패널의 색상을 바꿀 때 있는 속성값입니다! 제가 만든 ChangepanelColor 함수는 main form에서는 사용하면 잘 바뀌는데 다른 폼에서 사용 할 때 안바뀝니다 ㅠㅠ

프로그래밍 언어에 대한 질문이 아닌 Windows Forms 질문이어서 카테고리를 변경해드립니다.