Je commencerai par ceci: je ne suis pas bon en C#. Je ne sais pas pour la plupart ce que je fais. Maintenant que la clause de non-responsabilité est en route, j'essaie d'accéder à un TabControl dans mon interface (fait en utilisant VS2008, donc les parties sont dans Interface.Designer) d'une autre classe - sauf que l'utilisation de Interface.tabControl1
me dit que j'ai besoin d'une référence d'objet , et si je tape .
après Interface
je viens d'obtenir une liste de choses, pas un des objets dans l'interface. L'utilisation de Interface.ControlCollection
n'aide pas non plus.Composants de référence C# dans la classe d'interface
L'aide est appréciée, et je suis sûr que c'est vraiment basique et je suis juste une clé, mais bon.
EDIT: en Program.cs
(que je suppose été créée automatiquement quand je commencé à construire l'application), l'interface est créée sans nom:
static void Main()
{
Application.Run(new Interface());
}
Interface()
est appelé à partir Interface.cs
:
public partial class Interface : Form
{
public Interface()
{
InitializeComponent();
}
}
Le le reste de la classe partielle est créé en Interface.Designer.cs
- qui a été générée automatiquement lors de la construction de l'interface dans le concepteur VS2008.
Je ne suis pas sûr si cela aide, ou ne sert à rien. Mais il est de toute façon. =)
EDIT # 2:
Je pense que je devrais expliquer ce que je fais, peut-être alors les gens vont comprendre ce que je besoin de ceci:
j'avais une interface, avec un tabcontrol, et les onglets générés à la volée en fonction de ce que l'utilisateur faisait. Cela causait des problèmes parce que je ne faisais pas de chaque onglet son propre objet, donc quand il s'agissait d'accéder à des choses dans les pages sans affecter les autres onglets, ça ne marchait pas. En tant que tel, j'ai enlevé tout le code d'une méthode dans Interface.cs
qui a été utilisé pour construire un onglet, et a fait une nouvelle classe appelée Tab.cs
- C'est là que le problème des références brisées est apparu. Code pertinent, déplacé de l'interface dans l'onglet:
public Tab(string inputstring)
{
.....
//call this method if button is clicked
cancel.Click += new System.EventHandler(this.close_Click);
//ridiculous calculations to get the buttons in the right place
int leftside = ((tabControl1.Width/100) * 96);
int bottomside = ((tabControl1.Height/100) * 93);
int bottomside2 = ((tabControl1.Height/100) * 99);
.....
//call this method if button is clicked
save.Click += new System.EventHandler(this.save_Click);
.....
//call this method when tab is entered
newtab.Enter += new System.EventHandler(this.tabSelect);
}
Le code avec tabControl1.Width est particulièrement pertinent. Cela ramène alors à ce que j'ai commencé à essayer de poser avant. J'espère que cela rendra peut-être les choses plus claires.
EDIT3: (pour Henk Holterman) J'ai renommé Interface en MainForm. VS2008 a décidé qu'il devrait s'appeler interface, je n'ai simplement pas changé cela. Mais je vois pourquoi le changement est bon, merci = P
Vous pouvez améliorer cela en affichant des morceaux de code légèrement plus gros. Et essayez d'indiquer ce que l'interface est réellement (un formulaire?) –
Nous sommes presque là, s'il vous plaît montrer _where_ que vous voulez accéder aux TabPages. –
Et: 'Interface' est un très mauvais nom pour une classe Form. Que diriez-vous de le refactoriser à 'MainForm'? Utilisez l'Explorateur de solutions. –