IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

[JFace] TreeViewer & ComboBox


Sujet :

SWT/JFace Java

  1. #1
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut [JFace] TreeViewer & ComboBox
    Bonjour,

    Là je craque... Depuis quelques temps déjà j'essai de faire en sorte que mon arbre (contenant n colonnes) laisse la possibilité à l'utilisateur de modifier l'une de ces colonnes à l'aide d'une comboBox.
    Après avoir quelques Snippets et autres bout de code j'en arrive a quelques choses comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    	TreeColumn colVersion = new TreeColumn(tree, SWT.LEFT);
    			colVersion.setText("Version");
    			treeColLayout.setColumnData(colVersion, new ColumnWeightData(35, 50, true));
     
    			TreeViewerColumn vColVersion = new TreeViewerColumn(treeViewer, colVersion);
    			vColVersion.setEditingSupport(new EditingSupport(treeViewer) {
     
    				@Override
    				protected void setValue(Object element, Object value) {
    					...........
    				}
     
    				@Override
    				protected Object getValue(Object element) {
                                            .............
    				}
     
    				@Override
    				protected CellEditor getCellEditor(Object element) {
    					.......................
    				}
     
    				@Override
    				protected boolean canEdit(Object element) {
    					...................
    				}
    			});
    Et j'ignore absolument comment remplir ces petites méthodes, sachant que les listes des items qui doivent apparaître dans la comboBox vienne d'une classe (mettons A) et que l'item qui doit être sélectionné est aussi dans cette classe.

    Là je vous avoue que j'apprécierais vraiment un bon coup de pouce

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Les différentes méthodes à implémenter parlent d'elle-même :

    Imaginons que la classe A dont tu parles soit comme ça (bon j'utilise Personne comme nom, parce que A, bof...). Et que la propriété qu'on gère dans cette colonne avec combo est le prénom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class Personne  {
     
         private String nom;
         private String prenom;
     
         public String getNom() {
               return nom;
         }
     
         public void setNom(String nom) {
               this.nom=nom;
         }
     
         public String getPrenom() {
               return prenom;
         }
     
         public void setPrenom(String prenom) {
               this.prenom=prenom;
         }
     
    }
    1) récupérer la valeur de l'élément pour la colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected Object getValue(Object element) {
                                            .............
    }
    Le code doit donc être tel que on retourne la valeur pour la colonne en question pour l'objet passé en argument :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected Object getValue(Object element) {
         if ( element instanceof Personne ) { // parce qu'on peut avoir des objets différents dans l'arbre
              return ((Personne)element).getPrenom()); // parce que cette colonne afficher les prénoms, et que pour avoir le prénom d'une Personne, on appelle getPrenom()
         }
         else {
             return null; // dans les cas qu'on gère pas, on retourne null
         }
    }
    2) modifier la valeur après saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
    protected void setValue(Object element, Object value) {
    					...........
    }
    Le code doit donc être tel qu'on affecte la valeur passée en argument à l'objet passé en argument, pour la propriété correspondant à la colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Override
    protected void setValue(Object element, Object value) {
         if ( element instanceof Personne ) { // parce qu'on peut avoir des objets différents dans l'arbre
             if ( value instance String || value==null ) { // en fonction du type de la valeur saisie (qui dépend de l'éditeur)
                 ((Personne)element).setPrenom((String)value); // parce qu'on affecte le prénom d'une personne en appelant la méthode setPrenom()
             }
         }
    }

    3) indiquer si une valeur est éditable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
    protected boolean canEdit(Object element) {
         ...
    }
    Cette méthode doit retourner true si on peut modifier le prénom de l'objet passé en argument, ou false sinon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    @Override
    protected boolean canEdit(Object element) {
         if ( element instanceof Personne ) {
             // ici on peut retourner true, ou tester une méthode qui dit si c'est éditable ou pas :
     
            Personne personne = (Personne)element;
     
            if  (personne.isReadOnly() ) {
                return false; // on ne peut pas éditer
            }
            else if ( !UnTrucQuiGereLesDroits.hasLeDroitDeModifier(personne) ) { // on peut gérer tout ce qu'on veut qui empêche ou permet l'édition
                return false;
            }
            else {
                 return true; // on a le droit de modifier le prénom de cette personne
            }
     
     
         }
         else {
             return false; // dans les autres cas, on dit que c'est pas éditable, comme ça on est tranquille : on ne risque pas de pouvoir modifier un truc qu'on avait pas prévu
         }
    }
    4) la méthode qui dit quel éditeur on veut utiliser pour l'élément passé en argument pour cette colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
    protected CellEditor getCellEditor(Object element) {
    					.......................
    }
    La on doit implémenter ce qui permettra de générer l'éditeur qu'on veut pour le cas

    Au plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Override
    protected CellEditor getCellEditor(Object element) {
     
              if ( element instance Personne ) {
                     return new ...
              }
              else {
                    return null;
              }
     
    }
    Mais on peut tout à fait tester autre chose, pour avoir des éditeurs différenciés selon d'autres propriétés de l'objet Personne (le genre (homme/femme) par exemple), ou des propriétés d'autres objets (par exemple, une préférence qui permet de dire qu'on veut un choix dans une liste restreinte (combo readonly), un choix dans une liste indicative (combo pas readonly), ou un choix libre (text).

    Ensuite, pour un éditeur de type combo, regarde :

    • soit ComboBoxCellEditor : utilise un CCombo, donc une combo avec des String, ce qui correspond au cas implémenté dans le setValue() ci-dessus
    • soit ComboBoxViewerCellEditor : qui correspond à un ComboViewer, donc pour gérer des objets avec un modèle (par exemple, on a une classe Prenom, avec une propriété genre, pour filtrer les prénoms féminins ou masculins (en fonction du genre de la personne)... dans ce cas le setValue() doit évidemment traiter le cas particulier (puisque c'est une instance de Prenom qui va être passé en argument et non une instance de String).


    Par exemple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String[] listeDesPrenoms = DAO.getListeDePrenoms();
    return new ComboBoxCellEditor(tree, listeDesPrenoms,
            SWT.READ_ONLY);

  3. #3
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut
    Merci joel pour avoir clarifié ces méthodes,

    Je pense avoir pu les implémenter correctement mais j'obtiens une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.eclipse.core.runtime.AssertionFailedException: assertion failed: Column 0 has no label provider.
    Vu qu'on utilise désormais un EditingSupport par colonne est-il nécessaire d'avoir un label / content provider pour cet arbre ?? Ne serait-ce pas la raison de cette erreur ??
    Ou n'en faudrait-il pas un par colonne ??

  4. #4
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut
    Bon j'ai résolue une partie du problème en enlevant le label provider assigné à l'arbre et en ajoutant un CellProvider a chaque TreeViewerColumn.

    Maintenant l'arbre est bien rempli, mais si j'essai de modifier la colonne avec le ComboBoxCellEditor j'obtiens cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    org.eclipse.core.runtime.AssertionFailedException: assertion failed: 
    	at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110)
    	at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96)
    	at org.eclipse.jface.viewers.ComboBoxCellEditor.doSetValue(ComboBoxCellEditor.java:227)
    	at org.eclipse.jface.viewers.CellEditor.setValue(CellEditor.java:857)
    	at org.eclipse.jface.viewers.EditingSupport.initializeCellEditorValue(EditingSupport.java:100)
    	at org.eclipse.jface.viewers.ColumnViewerEditor.activateCellEditor(ColumnViewerEditor.java:195)
    	at org.eclipse.jface.viewers.ColumnViewerEditor.handleEditorActivationEvent(ColumnViewerEditor.java:445)
    	at org.eclipse.jface.viewers.ColumnViewer.triggerEditorActivationEvent(ColumnViewer.java:680)
    	at org.eclipse.jface.viewers.ColumnViewer.handleMouseDown(ColumnViewer.java:664)
    	at org.eclipse.jface.viewers.ColumnViewer.access$0(ColumnViewer.java:660)
    	at org.eclipse.jface.viewers.ColumnViewer$1.mouseDown(ColumnViewer.java:89)
    	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:191)
    	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
    	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
    	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
    	at com.xxx.mbde.gettools.view.dialog.SubCompDialog.open(SubCompDialog.java:60)
    	at com.xxx.mbde.gettools.view.GetView.treeBox(GetView.java:330)
    	at com.xxx.mbde.gettools.view.GetView.access$12(GetView.java:328)
    	at com.xxx.mbde.gettools.view.GetView$ToolItemListener.widgetSelected(GetView.java:510)
    	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
    	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
    	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
    	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
    	at com.valeo.mbde.gettools.view.GetView.execute(GetView.java:232)
    	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293)
    	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
    	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
    	at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
    	at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
    	at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829)
    	at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815)
    	at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805)
    	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
    	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
    	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
    	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
    	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
    	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
    	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
    	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
    	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
    	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
    	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
    	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
    	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
    	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
    Et alors pour le coup, j'ai aucune idée de ce qui ne va pas....

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    C'est parce que le ComboBoxCellEditor fonctionne avec pour valeur "éditée" l'index de la chaîne dans le tableau, pas la valeur de la chaîne. Je trouve ça abscons personnellement, et je n'utilise personnellement toujours que des ComboViewer, jamais directement de Combo ou CCombo. Au moins, on a un semblant de MVC.

    Ou essaye ça (je n'ai pas testé, normalement, on ne devrait pas étendre de composant JFace, mais il n'y a pas de contrôle donc ça devrait passer).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    public class StringComboBoxCellEditor extends ComboBoxCellEditor {
     
    	public StringComboBoxCellEditor() {
    		super();
    	}
     
    	public StringComboBoxCellEditor(Composite parent, String[] items) {
    		super(parent, items);
    	}
     
    	public StringComboBoxCellEditor(Composite parent, String[] items, int style) {
    		super(parent, items, style);
    	}
     
     
    	@Override
    	protected void doSetValue(Object value) {
    		if ( value instanceof String ) {
    			super.doSetValue(indexOf(value, getItems()));
    		}
    		else {
    			super.doSetValue(-1);
    		}
    	}
     
    	private static int indexOf(Object value, String[] array) {
     
    	     int index = -1;
    	    for (int i=0; index==-1 && i<array.length; i++) {
    	    	if ( (array[i] == value) || (array[i] != null && array[i].equals(value)) ) {
    	            index = i;
    	        }
    	    }
     
    	    return index;
    	}
     
    	@Override
    	protected Object doGetValue() {
    		int index = (Integer)super.doGetValue();
    		if ( index==-1 ) {
    			return null;
    		}
    		else {
    			return getItems()[index];
    		}
    	}
     
    }

  6. #6
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut
    Je travail dessus, mais par simple curiosité j'ai regardé comment j'aurais fais avec un ComboBoxViewerCellEditor.
    Et il me semble que j'aurai été bloqué lors de la création de cet éditeur, puisqu'il utilise la méthode setInput(input), et chez moi cet input dépend de la ligne sélectionnée... Non ?

  7. #7
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut
    Et une fois de plus je parle avant de réfléchir.....

    Je met içi la classe qui étend Editing Support et qui fonctionne bien !!
    Si jamais quelqu'un d'autre lutte un jour !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public class ComboEditingSupport extends EditingSupport{
     
    	private ComboBoxViewerCellEditor cellEditor = null;
     
    	public ComboEditingSupport(ColumnViewer viewer) {
    		super(viewer);
    		cellEditor = new ComboBoxViewerCellEditor((Composite) getViewer().getControl(), SWT.DROP_DOWN | SWT.READ_ONLY);
    		cellEditor.setLabelProvider(new LabelProvider());
    		cellEditor.setContentProvider(new ArrayContentProvider());
     
    	}
     
    	@Override
    	protected CellEditor getCellEditor(Object element) {
    		if (element instanceof DimComp) {
    			cellEditor.setInput(((DimComp)element).getReleases());
    			return cellEditor;
    		}
    		return null;
    	}
     
    	@Override
    	protected boolean canEdit(Object element) {
    		return true;
    	}
     
    	@Override
    	protected Object getValue(Object element) {
    		if (element instanceof DimComp) {
    			return ((DimComp)element).getSelectedRelease();
    		}
    		return null;
    	}
     
    	@Override
    	protected void setValue(Object element, Object value) {
    		if (element instanceof DimComp) {
    			if (value instanceof String || value==null) {
    				((DimComp)element).setSelectedRelease((String)value);
    			}
    		}
    	}
     
    }

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Pas obligatoirement. Si la liste de valeurs dépend d'un choix dans une autre colonne. Par exemple, le cas je sélectionne un pays dans une colonne, et je veux sélectionner une ville de ce pays uniquement dans l'autre : dans ce cas, on peut utiliser un ViewerFilter et n'avoir qu'un seul input. Cependant, si on veut éviter de charger par exemple une table contenant des millions d'enregistrements, il faudra passer dans l'input. Dans les deux cas, on doit pouvoir réagir au changement de la valeur pour appeler soit setInput(), soit setFilters(). Tu peux t'appuyer sur un ICellEditorListener pour réagir au changement dans la première colonne.

    [EDIT]Tu t'es répondu avant que je termine ma réponse[/EDIT] effectivement, c'est encore un autre cas : si les choix sont directement liés à l'élément sélectionné.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JFace] TableViewer et ComboBox
    Par luffy64 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 17/09/2014, 16h14
  2. Treeview dans Combobox
    Par matdur dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 06/01/2010, 01h14
  3. [jface]TreeViewer "non décoré"?
    Par pssst dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 27/03/2009, 11h03
  4. [JFace] TreeViewer : selection "vide"
    Par Mucho dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 30/05/2007, 19h21
  5. [C#][.Net 2.0] donner focus à Combobox, après click sur treeview
    Par Harry_polin dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/02/2006, 23h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo