이전에 물어 보았지만 상황이 약간 다르다고 생각합니다. 나는 단호하게 일하는 데 약 4 시간을 보냈다. 마침내 깨달았다. 나는 무엇을해야할지 모른다.C# "public"을 사용하지 않고 외부 클래스의 컨트롤에 액세스하기
2 개의 양식 (Form1, Settings)과 내가 만든 클래스를 테마라고합니다.
현재 작동하지만 Form1 내에있는 모든 속성을 가져 왔으며 Form1의 외부에서 Themes.cs
으로 변경할 수있는 테마 지정과 관련된 많은 코드로 이동하고 싶습니다.
테마 변경 : 테마를 변경하려면 사용자가 설정 양식을 열고 드롭 다운 메뉴에서 테마를 선택하고 '설정'버튼을 누릅니다.이 모든 기능이 작동하지만 이제는 내 자신의 것으로 이동하려고합니다. 클래스 및 컴파일 할 코드를 가져올 수 없습니다.
다음은 이동하기 전에 작동하는 예제 코드입니다.이 코드는 수정하려는 두 가지 컨트롤이지만 약 30 가지가 있습니다. 나는 코드를 abridging 오전 :
양식 1 :
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSettings_Click(object sender, EventArgs e)
{
Settings frm = new Settings(this);
frm.Show();
}
private Color txtRSSURLBGProperty;
private Color txtRSSURLFGProperty;
public Color TxtRSSURLBGProperty
{
get { return txtRSSURLBGProperty; }
set { txtRSSURL.BackColor = value; }
}
public Color TxtRSSURLFGProperty
{
get { return txtRSSURLFGProperty; }
set { txtRSSURL.ForeColor = value; }
}
설정 형태 :
public partial class Settings : Form
{
public Settings()
{
InitializeComponent();
}
private Form1 rssReaderMain = null;
public Settings(Form requestingForm)
{
rssReaderMain = requestingForm as Form1;
InitializeComponent();
}
private void button2_Click(object sender, EventArgs args)
{
// Appearence settings for DEFAULT THEME
if (cbThemeSelect.SelectedIndex == 1)
{
this.rssReaderMain.TxtRSSURLBGProperty = Color.DarkSeaGreen;
this.rssReaderMain.TxtRSSURLFGProperty = Color.White;
[......about 25 more of these....]
}
테마 클래스는 현재 비어 있습니다. 다시 말하지만, 목표는 최대한 많은 코드를 테마 클래스 (특히 가능한 경우 get/set 문)로 옮기고 적절한 드롭 다운 항목이 선택되면 설정 양식 내에서 다음과 유사한 메소드를 사용하는 것입니다. SetTheme(Default);
누군가가 도울 수 있기를 바란다. 나는 그것을 올바르게 설명하기를 희망한다! 나는 두뇌를 해치 웠고 나는 이것을 빨리해야 할 필요가있다! 모든 사람들이 확신 하듯이 미리 감사드립니다. 누군가가 원할 경우 teamviewer 또는 logmein이 있습니다.
필요한 경우 내 프로젝트를 우편 번호로 보낼 수도 있습니다. 너무 많은
감사합니다,
커트
검토수정 된 코드 :
을 Form1 형태 :
public partial class Form1 : ThemeableForm
{
public Form1()
{
InitializeComponent();
}
ThemeableForm 양식 :
internal abstract class ThemeableForm : Form
{
private Color rssLabelBGProperty;
private Color rssLabelFGProperty;
public Color RssLabelBGProperty
{
get { return rssLabelBGProperty; }
set { lRSS.BackColor = value; }
}
public Color RssLabelFGProperty
{
get { return rssLabelFGProperty; }
set { lRSS.ForeColor = value; }
}
설정 형성 :
public Settings(ThemeableForm requestingForm)
{
rssReaderMain = requestingForm as ThemeableForm;
InitializeComponent();
}
private ThemeableForm rssReaderMain = null;
private void button2_Click(object sender, EventArgs args)
{
// Appearence settings for DEFAULT THEME
if (cbThemeSelect.SelectedIndex == 1)
{
this.rssReaderMain.LRSSBGProperty = Color.DarkSeaGreen;
this.rssReaderMain.LRSSFGProperty = Color.White;
}
지금 내 GET/SET (위의 예제 코드에서 lRSS)의 모든 컨트롤이
does not exist in the current context
함께 오류가 발생했습니다. 또한 경고 메시지가 표시됩니다.
경고 1 중 하나도 설계 할 수 없기 때문에이 파일을 표시 할 수 없습니다. 디자이너가 파일의 클래스 다음에 을 검사했습니다.
Form1 --- 기본 클래스 'RSSReader_BKRF.ThemeableForm'을 로드 할 수 없습니다.어셈블리가 참조되었고 모든 프로젝트 이 빌드되었는지 확인하십시오. 색상, 글꼴 등
설정 테마를 선택하고 기본 테마로 쓰는 형성 보자 : 0
Winforms, webforms 또는 무엇? –
그의 코드 스 니펫에서 Winforms처럼 보입니다. 웹 폼은 페이지에서 상속됩니다. –
죄송합니다.이 질문에 대답하거나 본 적이 없습니다. C# Windows Forms –