Je sais que cela a déjà été demandé mais je crois que ma situation est un peu différente - ou je ne comprends pas les réponses données. J'ai passé environ 4 heures à travailler sur ce solide et finalement réalisé, je ne sais pas quoi faire.C# Accéder aux contrôles d'une classe externe sans "public"
J'ai deux formulaires (Form1, Settings) et une classe I créée appelée Themes.
J'ai les propriétés get/set qui fonctionnent actuellement mais qui sont toutes dans Form1 et je voudrais déplacer autant de code lié au thème que je peux en dehors de Form1 et en Themes.cs
. Changement de thème: Pour modifier le thème, l'utilisateur ouvre le formulaire Paramètres et sélectionne un thème dans le menu déroulant et appuie sur le bouton «Set» - tout cela fonctionne, mais maintenant je veux le déplacer dans mon propre classe et je ne peux pas obtenir le code pour compiler.
Voici un exemple de code qui fonctionne avant de se déplacer - notez qu'il ne s'agit que de 2 contrôles différents que je veux modifier mais il y en a environ 30 au total. J'abrègent le code:
Formule 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; }
}
Paramètres Forme:
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....]
}
La classe thème est actuellement vide. Encore une fois, le but est de déplacer autant de code dans la classe thèmes (en particulier les instructions get/set si possible!) Et j'espère juste utiliser une méthode similaire dans le formulaire Paramètres une fois l'objet drowndown sélectionné: SetTheme(Default);
J'espère que quelqu'un peut aider, et j'espère que je l'ai bien expliqué! Je me suis creusé la tête et j'ai besoin de faire ça assez vite! Merci beaucoup d'avance car je suis sûr que tout le monde dit. J'ai teamviewer ou logmein si quelqu'un veut se connecter à distance - c'est aussi facile.
Je peux aussi envoyer mon projet en zip si nécessaire.
Merci beaucoup,
Kurt
Code modifié pour examen:
forme Form1:
public partial class Form1 : ThemeableForm
{
public Form1()
{
InitializeComponent();
}
forme 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; }
}
formulaire Paramètres:
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;
}
Maintenant, les tous les contrôles dans mon get/set (LRSS dans le code exemple ci-dessus) erreur avec does not exist in the current context
. Je reçois aussi l'avertissement:
Attention designer 1Le n'a pas pu être démontré pour ce fichier, car aucun des les classes à l'intérieur peut être conçu. Le designer a examiné les classes suivantes dans le fichier:
Form1 --- La classe de base 'RSSReader_BKRF.ThemeableForm' n'a pas pu être chargée.Assurez-vous que l'assembly a été référencé et que tous les projets ont été créés. 0 0
Winforms, webforms, ou quoi? –
On dirait que Winforms, à partir de ses extraits de code. Les formulaires Web héritent de la page. –
Désolé n'a jamais répondu à cette question ni le voir - son C# Windows Forms –