Problème avec ListBox.ScrollIntoView ( VB 2015, WPF )

thierry_st_malo 2 Messages postés samedi 23 septembre 2017Date d'inscription 24 septembre 2017 Dernière intervention - 23 sept. 2017 à 18:16 - Dernière réponse : Whismeril 10517 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention
- 24 sept. 2017 à 20:26
Bonjour,


Public Sub Display(St As String)

With WinMain.Log
While .Items.Count >= MaxLogSize
.Items.RemoveAt(0)
End While
.Items.Add(St)
.ScrollIntoView(.Items(.Items.Count - 1))
End With

End Sub


A priori c'est tout simple : je veux que le dernier item ajouté à la listbox Log soit toujours visible, mais le déroulement vertical ne se fait pas et la listbox reste calée sur le premier item.
Pouvez-vous m'aider ?

Merci d'avance.
Afficher la suite 
2Messages postés samedi 23 septembre 2017Date d'inscription 24 septembre 2017 Dernière intervention

8 réponses

Répondre au sujet
vb95 1385 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 23 sept. 2017 à 18:51
0
Utile
3
Bonsoir

Listbox1.TopIndex(ListBox1.Items.Count - 1)


plus d'information ici : https://msdn.microsoft.com/fr-fr/library/system.windows.forms.listbox.topindex(v=vs.110).aspx
Whismeril 10517 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 23 sept. 2017 à 22:43
Bonsoir
la propriété TopIndex n'existe pas en wpf
vb95 1385 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > Whismeril 10517 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 24 sept. 2017 à 00:27
Salut Whis
Il y a déjà 4 VB
- VBA
- VBscript
- VB6
- VB Net

Si maintenant il y a 2 VB Net ( un "Normal" et un en wpf )
Cela ne facilite guère les choses à mon avis
Whismeril 10517 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention > vb95 1385 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 24 sept. 2017 à 08:03
En fait WPF existe depuis 2008, mais il cible plutôt les codeurs C#.
Commenter la réponse de vb95
Whismeril 10517 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 23 sept. 2017 à 23:04
0
Utile
Bonsoir,

j'ai mis un bouton qui fait ça
        Private ligne As Integer = 1
        Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            lst.Items.Add(String.Format("Ligne {0:00}", ligne))
            ligne += 1
            lst.ScrollIntoView(lst.Items(lst.Items.Count - 1))
        End Sub

Ça fonctionne bien, mon "dernier" item est toujours visible.

J'ai ensuite adapté ton code
    Private Sub Button2_Click(sender As Object, e As RoutedEventArgs)
        With lst
            While .Items.Count >= 20
                .Items.RemoveAt(0)
            End While
            .Items.Add("dernier")
            .ScrollIntoView(.Items(.Items.Count - 1))
        End With
    End Sub

Et ça marche aussi, mon "dernier" item est toujours visible.

Donc ce code est bon.
Qu'est ce qui appelle cette méthode?

Commenter la réponse de Whismeril
thierry_st_malo 2 Messages postés samedi 23 septembre 2017Date d'inscription 24 septembre 2017 Dernière intervention - Modifié par thierry_st_malo le 24/09/2017 à 11:25
0
Utile
1
Merci, Whismeril.

Ce code est appelé par un module de l'application et pas par un évènement.
Mais je commence à me lasser de WPF, que je trouve inutilement complexe pour ce que j'ai à faire et assez mal documenté, pour VB en tous les cas.

Merci à tous pour vos réponses, en tous les cas :-)
Whismeril 10517 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 24 sept. 2017 à 20:25
Ça n'est pas vraiment plus complexe que winforms, mais il est impératif de penser objet, binding et MVC , or avec
.Items.Add(St)
t'en est encore à VB6 (c'est pas un reproche, mais une constatation).

Oui c'est mal documenté pour VB, car ce sont les codeurs C# qui le réclamaient.

En C++, on peut donner le design à faire à une équipe de designer et le code métier à une équipe de codeurs. En winform ça n'est pas possible. Alors les sociétés qui payent rubis sur l'ongle les licences annuelles de chacun de leur collaborateurs (associés ou employés) ont vite fait comprendre à Microsoft qu'il s'agissait d'une régression inacceptable et qu'à défaut de régler le problème, elles iraient voir ailleurs.

WPF a donc été créé pour ces pros, et documenté en C#.

VB.Net lui cible les anciens "VB6istes", et les amateurs (au bon sens du termes), mais comme c'est une sorte de skin de C#, WPF existe aussi, pas ou peu documenté.
Commenter la réponse de thierry_st_malo
Whismeril 10517 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 24 sept. 2017 à 20:26
0
Utile
Pour ton problème, cela pourrait venir d'un problème cross thread, ou d'autre chose.
Donc quel est le code de ce module?
Commenter la réponse de Whismeril

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.