10
votes

Appeler une fonction dans la classe de formulaire d'une autre classe, C # .NET

Quelqu'un peut-on me laisser savoir par certains code comment puis-je appeler une fonction située dans la classe de formulaire d'une autre classe?

Certains code seront de grande aide! P>

Merci P>

EDIT: Ceci est mon code actuel P>

 public partial class frmMain : Form
 {
    //*******Class Instances*******
    ImageProcessing IP = new ImageProcessing();


    //********************
    public void StatusUpdate(string text)
    {
        tlsStatusLabel.Text = text;
    }//


    public frmMain()
    {
        InitializeComponent();            
    }//
}


class ImageProcessing
{

    private void UpdateStatusLabel(frmMain form, string text)
    {
        form.StatusUpdate(text);
    }//

   private UpdateLabel()
   {
        UpdateStatusLabel(frmMain, "Converting to GreyScale");
   }
}


1 commentaires

5 Réponses :


2
votes

Vous devrez créer une nouvelle instance de formulaire, puis l'appeler à l'aide de l'instance. Si c'est statique, vous pouvez simplement l'appeler en appelant Form1.Method (). XXX

Je vous suggère de déplacer cette méthode courante à une autre classe.

Si La méthode courante est utilisée dans l'interface utilisateur, puis créer une classe de formulaire de base et dériver toutes vos formulaires avec cette classe de formulaire de base. Maintenant, déplacez cette méthode courante sur la forme de base. Vous pouvez ensuite utiliser la méthode de l'un quelconque du formulaire dérivé de celui-ci.


0 commentaires

3
votes

C'est assez facile. Soit transmettre une référence à un formulaire existant dans l'appel, soit créer une nouvelle instance de votre formulaire, puis appelez votre méthode, tout comme n'importe quel autre: xxx

ou en faites une méthode statique pour que vous ne puissiez pas 't doit créer une instance (mais elle ne pourra pas modifier Windows de formulaire ouverte).

update

Il ressemble à la classe d'imageProcessing ne fait jamais référence à la forme. Je modifierais légèrement votre code: xxx

puis un petit tweek dans le constructeur de formulaire: xxx


4 commentaires

Merci, mais comment j'appellerais la fonction DosomoqLeelse? Mon problème est de taper le "formulaire"? J'essaie d'insérer le nom du formulaire mais je reçois une erreur que le nom du formulaire est un type mais utilisé comme variable


@Mouthpiec - Si vous publiez une partie de votre code existant, nous pourrions peut-être vous donner une meilleure idée de ce que vous devez faire.


Postez votre code, vous devez faire quelque chose de très faux pour obtenir cette erreur du compilateur.


Merci Justin ... toujours ne fonctionne toujours pas :( Je reçois une erreur dans le traitement de l'image IP = nouveau traitement de l'image (ceci); dire que "ceci" est un mot inconnu. (Mais ce constructeur doit avoir 1 argument.



1
votes

Si la méthode n'est pas liée à l'UI, une fois de votre exemple, je comprends que ce n'est pas le cas, vous pouvez créer une autre classe qui contiendra cette méthode, puis l'utiliser dans votre classe de formulaire et dans tous les autres endroits où vous souhaitez Utilisez-le.


0 commentaires

15
votes

Un moyen rapide et sale consiste à créer une référence du formal de laforme de votre programme.cs comme indiqué ci-dessus.

Vous pouvez également créer une classe statique pour gérer les appels à votre formulaire principal: P> XXX PRE>

Mettez ce qui précède dans votre fichier MainForm.cs à l'intérieur de l'espace de noms, mais séparé de votre classe MainForm.
Ensuite, mettre cet événement appelez dans votre classe principale MainForm.cs. P> xxx pré>

puis lorsque vous initiez le MainForm.cs Ajoutez cette poignée d'événement à votre formulaire. P>

     UpdateStatusBarMessage.ShowStatusMessage ("Hello World!");


3 commentaires

Merci! J'ai essayé votre option mais je reçois une erreur dans "OnNewStatusMessage (Strmessage);" dire que OnNewStatusMessage n'est pas défini sur une instance d'un objet


Je voulais juste dire Ty Ty Ty Ty Ty Ty Ty Ty Ty Lol. Étant donné que j'ai appris à écrire mes propres contrôles et à les utiliser et à ne pas encombrer la forme principale M y avec du code qui ne serait pas là, ce fil m'a aidé à Soooooooooooooooooo de nombreuses bonnes manières. Bravo!


Merci pour la solution élégante! C'était très facile à comprendre et j'ai pu obtenir ce travail sans attelage. :)



3
votes

Vous pouvez le faire de manière simple:

1- Créer une classe publique et définir une variable statique publique comme celle-ci: p> xxx pré>

2- dans la fonction de charge sur le formulaire Écrivez cette ligne: p> xxx pré>

3- Enfin, dans votre classe personnalisée, vous pouvez appeler toutes les fonctions publiques à l'intérieur du formulaire: P>

public class MyClass
{
    public void Func1()
    {
        Globals.form.DoSomthing();
    }
}


0 commentaires