Control utilisateur et form [Résolu]

Messages postés
18
Date d'inscription
samedi 12 février 2005
Dernière intervention
10 octobre 2012
- 25 août 2012 à 15:16 - Dernière réponse :
Messages postés
18
Date d'inscription
samedi 12 février 2005
Dernière intervention
10 octobre 2012
- 25 août 2012 à 20:55
Bonjour à tous, je rencontre actuellement un petit problème dans une programmation avec un contrôle utilisateur et l'affichage d'une form.

voici le code en simplifié et uniquement ce qui concerne le problème.

Control utilisateur:

Public Class Rtb_Base
    Inherits RichTextBox

    Public Sub Recherche()
        Dim f As New FrmRechrRemp(Me.SelectedText, True)
        f.Show()
    End Sub

end Class


Dans ma form de recherche, j'ai le code suivant:

    ''' Recherche le mot suivant
    Private Sub BtSuivant_Click_1(sender As System.Object, e As System.EventArgs) Handles BtSuivant.Click

        Dim StartPosition As Integer = Rtb_Base.SelectionStart
        Dim SearchType As CompareMethod

        'Reste du code....
       
    End Sub


Le problème vient du fait que je n'ai pas acces au données du RTB_Base. L'erreur indiquée est : Une référence à un membre non partagé requiert une référence d'objet.

Je comprend bien que l'erreur vient du fait que je n'ai pas utilisé un new RTB_Base. Cependant je souhaiterais vraiment créer ce control utilisateur qui a ca propre methode de recherche.

La question est donc: Comment aborder le problème et/ou le résoudre. Merci de vos conseils avisés
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
18
Date d'inscription
samedi 12 février 2005
Dernière intervention
10 octobre 2012
- 25 août 2012 à 20:49
3
Merci
Oui c'est bien ce qui me semblais.

Bon vais essayer d'être plus clair mais bon je fais ce que je peux pour expliquer au mieux mais c'est pas évident. ;-)

RTB_Base : Une classe qui hérite d'un RichtexteBox
RTB_Base_Name : "Propriété" de la classe RTB_Base

public class RTB_Base
      inehrits RichTextBox

public _Nom as string

public sub new(byval Nom as string)
      _Nom = Nom
end sub

'Fonction_recherche : Un procedure de RTB_Base

public sub Fonction_Recherche()
    dim f as new form_de_test
    f.show()
end sub

end Class


Form_de_test:

Private Sub Form_de_test_Load(sender As Object, e As System.EventArgs) Handles Me.Load
       'Affiche la propriété RTB_Base_Name comme texte
       me.Text = propriété RTB_Base_Name
    End Sub


ce qui me permettrais à chaque fois que je crée une instance de class de RTB_base de faire appel à la procédure Recherche qui m'afficherais une form avec un text valant la propriété nom de RTB_Base

Toto: Instance de la Classe RTB_Base (
dim Toto as NEW RTB_Base("toto")
)
Vache: Instance de la classe RTB_Base (
dim Tutu as New RTB_Base("vache")
)

Toto.Fonction_Recherche() 'affiche une fenetre avec texte toto
Tutu.Fonction_Recherche() 'affiche une fenetre avec texte vache


Ce système me permet d'éviter de taper à chaque fois l'appel à la fenêtre et le nom de celle-ci

Ais-je été plus clair??

Merci philposer 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de philposer
Meilleure réponse
Messages postés
18
Date d'inscription
samedi 12 février 2005
Dernière intervention
10 octobre 2012
- 25 août 2012 à 20:55
3
Merci
Par contre si j'envois l'élement par reference au constructeur de la form ca ne me pose plus de problème.

public class Form_de_test

public sub New(byref RTB as RTB_Base)
Me.text = RTB.Name
end Sub

end class


la class RTB devient:

public class RTB_Base
      inehrits RichTextBox

public _Nom as string

public sub new(byval Nom as string)
      _Nom = Nom
end sub

'Fonction_recherche : Un procedure de RTB_Base

public sub Fonction_Recherche()
    dim f as new form_de_test(me)
    f.show()
end sub

end Class



je peux très facilement faire:

dim Toto as NEW RTB_Base("toto")
Toto.Fonction_Recherche() 'affiche une fenetre avec texte toto

dim Tutu as New RTB_Base("vache")
Tutu.Fonction_Recherche() 'affiche une fenetre avec texte vache

Merci philposer 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de philposer
Messages postés
14299
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
16 novembre 2018
- 25 août 2012 à 16:37
0
Merci
Bonjour,

Quel est le nom de ton contrôle sur ta form ?
Rtb_Base.SelectionStart
Rtb_Base est le nom de la classe, pas de l'instance.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry
Messages postés
18
Date d'inscription
samedi 12 février 2005
Dernière intervention
10 octobre 2012
- 25 août 2012 à 17:32
0
Merci
merci pour le retour
mais je pense pas avoir été suffisamment explicite dans ce que je fais.

Je développe une class RTB_Base qui hérite d'un richtextbox (Du coup il me semble qu'il devient un control au même titre que le RichTextBox).
Le but étant de créer un control RichTextBox plus "complet" par l'ajout de fonction tels que mise en gras, souligné, barré, changement de couleur et de police, ....

Jusque la quand je place mon objet RTB_Base sur une form, il ne me reste plus qu'a faire Me.RTB_Base.gras() lorsque je clique sur un bouton.
Jusque la ça fonctionne

Du coup je souhaite faire un sytème de recherche lié au RTB_Base pour faire comme avec la mise en gras un système ou lors du clique sur un menu je n'ai plus qu'a taper la commande RTB_Base.chercher() ou tout l'ensemble des procédures et ouverture de la fenêtre de recherche se ferais dans RTB_Base.

Est ce que c'est un peu plus clair?
Commenter la réponse de philposer
Messages postés
14299
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
16 novembre 2018
- 25 août 2012 à 18:13
0
Merci
Bonjour,

Donc, tu as nommé ton contrôle Rtb_Base sur ta form avec le nom Rtb_Base.

De fait, si tu fais :
Me.Rtb_Base
Il sait qu'il doit aller chercher dans l'objet Me, mais :
Rtb_Base.*
Est le type.

Nommes ton contrôle Rtb_Base1 tout en laissant ta classe nommée Rtb_Base.
Car là tu fais la confusion entre le nom de l'objet et le nom de son type.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry
Messages postés
18
Date d'inscription
samedi 12 février 2005
Dernière intervention
10 octobre 2012
- 25 août 2012 à 18:31
0
Merci
Sauf erreur de ma part, cela m'arrange guère car ca veut dire que je dois ouvrir la fenêtre de recherche dans la form ou se trouve le control RTB_Base1

Je penche plutôt pour envoyer à la form de Recherche lors de la construction le RTB_Base par référence. Car j'aimerais que la recherche puisse être "intégré" au control RTB_Base et ne plus devoir "rien programmer"

Ou alors il y a quelque chose qui m'échappe complétement
Commenter la réponse de philposer
Messages postés
14299
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
16 novembre 2018
- 25 août 2012 à 20:21
0
Merci
Bonjour,

Je crois que l'on ne se comprend pas.

Pour faire une recherches sur une instance de ta classe :
- Tu dois instancier une instance, ce que fait le concepteur de fenêtre.
Par exemple, un contrôle de type "RTB_Base" nommé (par exemple) "toto" (nom très différent de la classe pour éviter la confusion).
- Ensuite pour appeler une méthode de ton contrôle dans ta form, tu fais :
toto.MaMethode()

Enfin, si j'ai bien compris la question.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.