Evènement "Sur avant saisie" pour une colonne insérée dynamiquement

Bonjour,
Je cherche à rendre une cellule non saisissable dans une listbox avec des colonnes Objet.
J’ai réussi lorsque ma colonne est créée depuis la GUI en indiquant $0:= -1 sur l’évènement “sur avant saisie”.

Par contre dans mon code, j’ajoute des colonnes dynamiquement avec Insérer colonne dans listbox.
Est-ce qu’il est possible d’associer une méthode à une colonne ajoutée dynamiquement ?

J’ai essayé

Merci d’avance si quelqu’un peut me donner un coup de main :slight_smile:

Bonjour Adrien,
il me semble que j’avais chercher sans trouver…

Alternativement, tu as la possibilité de partir d’une colonne pré existante en dur, un genre de colonne modèle contenant déjà l’appel à la méthode qui traite le Sur avant saisie, et tu dupliques au runtime :
LISTBOX DUPLIQUER COLONNE(*;“maColonneModèle”;…)

Bonjour Adrien,

Après ajout de tes colonnes, tu récupères le nom de l’objet associé à ta colonne et tu fais : OBJET FIXER EVENEMENTS

Patrick

Salut Patrick,
je ne pige pas, là : l’événement est une chose, mais le code déclenché par cet événement en est une autre, non ? Et je ne vois pas de “objet fixer code” ou “objet fixer méthode”… Ou alors tu gères ça dans une méthode “générale” à la listbox, quelle que soit la colonne ?

Salut Arnaud,

Mes listbox, dans QST, sont des Collections et dont je génère le contenu très souvent à la volée, sans connaitre le nombre de colonne ni leur contenu.
Par défaut, j’ai défini des évènements de base activé que je viens redéfinir à la volée en fonction du contenu de la listbox. De plus quand tu définis tes colonnes, je leur attribue un nom en fonction de leur emplacement. Du coup, je sais quel type de données est dans quelle colonne.
Donc, dans je clique dans une colonne je peux déclencher une action spécifique sur la colonne et ce, quelque soit le contenu.

Voici un exemple de code par défaut dans ma listbox :

Case of 
	: (Form event code=On Clicked)
		If (Right click)
		Else 
			LB_displayCellContent 
		End if 
		
	: (Form event code=On Double Clicked)
		If (Right click)
		Else 
			METHOD OPEN PATH(Form.currentElement.method;*)
		End if 
End case 

Puis, quand je définis ma listbox à la fin de mon traitement :

	ARRAY LONGINT($MyEventsOnLB;1)
	$MyEventsOnLB{1}:=On Clicked
	OBJECT SET EVENTS(*;$Listbox_Name;$MyEventsOnLB;Enable events disable others)

Dans ce cas, seul l’évènement ‘On clicked’ sera actif.

Voilà :wink:

Salut Philippe et Arnaud,

Merci bien pour votre aide ! C’est vrai que j’ai une première colonne en dur pour le moment, du coup je vais me baser sur celle ci et la dupliquer, ça me parait le plus simple dans un premier temps.
Sinon j’essaierai la seconde solution.

@EMANUEL.Patrick,
bien que vendredi soit passé, vu le nombre de fois que les gens se plantent quand ils s’adressent à toi, je me demande si tu ne devrais pas carrément opter un pseudo du genre “titi_67”, “Louis quatorze” ou “Keith Richards”…

Oui, OK, c’est bien ça : tu ne “fixes” pas de méthode pour la colonne, c’est la méthode de la listbox qui sait quoi faire en fonction de la colonne. Ce serait d’ailleurs pas mal de pouvoir “fixer” une méthode, je me suis demandé si une formule pouvait servir de “substitut”, mais ça me semble beaucoup plus limité.

Oui effectivement je ne sais plus quoi faire sinon de changer mon nom à l’état civil :roll_eyes:
Ou alors, Adrien connaît mon frère ? :joy:

Patrick

Oui tout à fait. Je gère ce dont j’ai besoin de manière exhaustive dans la méthode de la listbox, après tout dépend du contexte et de ce qui est activé.
Je trouve cela beaucoup plus facile à devoir géré à un seul endroit. Cela m’évite de le perdre dans les méandres des widgets.