これは前に尋ねられたことですが、私の状況は少し違っていると思います。私はこれをしっかりとやり遂げるのに約4時間を費やし、ついに実現しました、私は何をすべきか分かりません。C# "public"を除いた外部クラスのコントロールへのアクセス
私は2つのフォーム(Form1、Settings)と私がテーマと呼ばれるクラスを作成しました。
現在動作していますが、Form1内にあるすべてのプロパティを取得しています。私はForm1の外側とThemes.cs
にあるように、テーマ設定に関連する多くのコードを移動したいと思います。
テーマを変更する:テーマを変更するには、ユーザーが設定フォームを開き、ドロップダウンメニューからテーマを選択して[設定]ボタンを押します。これはすべて機能しますが、今は自分のテーマに移動しますクラスと私はコンパイルするコードを取得することはできません。
ここに移動前に動作するコードの例を示します。これは修正する2つの異なるコントロールですが、合計で約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);
誰かが助けてくれることを願っています。私は私の脳をぶち壊しており、私はこれをかなり早く完了させる必要があります!私は誰もが確信しているので、事前に多くの感謝。誰かが遠隔地に行きたいと思うなら、私はチームビューアーかログメインを持っています - それは簡単です。
必要に応じて私のプロジェクトをzip形式で送信することもできます。そんなに
おかげで、
クルト
レビューのため修正コード:
を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;
}
今私の取得/設定内のすべてのコントロール(上記の例のコードでLrssのは)does not exist in the current context
と一緒にエラー。また、私は警告を受ける:その中の クラスのいずれも設計しないことができるので、
警告1The設計者は、このファイルのため表示できませんでした。デザイナーはファイル内のクラスに続いて を検査しました:
Form1 ---基本クラス 'RSSReader_BKRF.ThemeableForm'を にロードできませんでした。アセンブリが参照され、すべてのプロジェクト が構築されていることを確認してください。色、フォントなど
設定テーマを選択し、デフォルトのテーマとしてそれを書き出す形成してみましょう:0
Winforms、webforms、または何ですか? –
コードスニペットのWinformsのようです。ウェブフォームはページから継承します。 –
申し訳ありませんがこれまでにこれにも、それを参照してください - そのC#Windowsフォーム –