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

Windows Forms Discussion :

Erreur dans la saisie d'un DataGridViewComboBoxColumn


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 16
    Points
    16
    Par défaut Erreur dans la saisie d'un DataGridViewComboBoxColumn
    Bonjour

    Si j'ai bien compris, le source suivant devrait permettre d'ouvrir le Combobox et de changer sa valeur.
    Or il provoque l'erreur Le thread actuel doit être en mode STA.
    J'ai raté quelque chose ?

    Merci de votre aide.

    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
    import clr
    clr.AddReference("System.Windows.Forms")
    from System.Windows.Forms import Application,Form,TabControl,TabPage,DataGridView,DataGridViewComboBoxColumn
     
    form = Form()
     
    liste = DataGridView()
     
    liste.Columns.Add(DataGridViewComboBoxColumn())
    liste.Columns[0].Items.AddRange(["","1h","1h30","2h"]) 
     
    liste.Rows.Add("1h")
    form.Controls.Add(liste)
     
    Application.Run(form)

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    C'est quoi comme langage ?
    On dirait un code python essayant d'utiliser du C#.

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    A mon avis, ce sujet à plus sa place dans la section python.
    Pour activer le mode STA :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    thread.SetApartmentState(ApartmentState.STA)

    Essaie de t'inspirer là dessus :
    https://github.com/pythonnet/pythonn...emo/wordpad.py

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 16
    Points
    16
    Par défaut Solution du problème
    Voici donc le programme corrigé grâce à popo pour ceux qui auraient le même problème que moi.
    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
    import clr
    clr.AddReference("System.Windows.Forms")
    from System.Windows.Forms import Application,Form,DataGridView,DataGridViewComboBoxColumn
    from System.Threading import ApartmentState, Thread, ThreadStart
     
    form = Form()
     
    liste = DataGridView()
     
    liste.Columns.Add(DataGridViewComboBoxColumn())
    liste.Columns[0].Items.AddRange(["","1h","1h30","2h"]) 
    form.Controls.Add(liste)
     
    liste.Rows.Add("1h")
     
    def app_thread():
     
       Application.Run(form)
     
       form.Dispose()
     
     
    def main():
        thread = Thread(ThreadStart(app_thread))
        thread.SetApartmentState(ApartmentState.STA)
        thread.Start()
        thread.Join()
     
     
    if __name__ == '__main__':
        main()
    Merci à lui.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 16
    Points
    16
    Par défaut Remerciements
    Merci popo pour ta réponse rapide.

    Effectivement c'est du python qui utilise le package clr pour utiliser le framework windows.

    Je suis désolé d'avoir posté dans la mauvaise rubrique car c'est au croisement de ASP.NET et de python, et j'ai choisi le premier pensant que le problème pouvait être commun à plusieurs langages.

    Je n'ai pas l'habitude de poster dans les forums car à 99,999% je résous mes problèmes avec les FAQ et les tutos, mais là tout le monde avait l'air de considérer comme évident l'utilisation de cet outil et si je faisais pareil, ça ne marchait pas.

    Je ne comprends pas pourquoi il faut utiliser tout ce bazar quand on utilise une cellule de ce type alors que je me suis toujours débrouillé sans avec tout le reste mais ce n'est pas grave.

    Un grand merci, je vais pouvoir continuer.

    J'ai mis la solution pour que ça serve à quelqu'un.

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    J'ai répondu au problème tel qu'il a été posé.
    Ravi que cela ait fonctionné.

    Mais je m'interroge sur le pourquoi avoir choisi de procéder ainsi sachant que C# propose nativement le Windows Form. Et que python bénéficie également de modules dédiés aux interfaces graphiques qui n'ont pas besoin de la CLR.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 16
    Points
    16
    Par défaut Solution 2
    En fait la solution précédente ne fonctionne pas sur le projet réel qui se gèle, et je ne sais pas pourquoi.
    Du coup j'ai trouvé une autre solution, beaucoup plus simple, et qui ne modifie pas l'existant.
    Il faut installer le package pywin32 et rajouter 2 lignes tout au début.

    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
    import pythoncom
    pythoncom.CoInitialize()
     
    import clr
    clr.AddReference("System.Windows.Forms")
    from System.Windows.Forms import Application,Form,DataGridView,DataGridViewComboBoxColumn
     
    form = Form()
     
    liste = DataGridView()
     
    liste.Columns.Add(DataGridViewComboBoxColumn())
    liste.Columns[0].Items.AddRange(["","1h","1h30","2h"]) 
    form.Controls.Add(liste)
     
    liste.Rows.Add("1h")
     
    Application.Run(form)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    Bonjour popo

    Je suis un programmeur amateur.
    J'avais fait de gros projets en Delphi il y a quelques (nombreuses) années.

    J'ai eu de nouveaux projets récemment, et tout l'environnement technique avait changé.

    Je te passe les détails, mais j'en suis arrivé à devoir choisir entre python et C#. Ca été serré et j'ai choisi python et je ne reviendrais pas dessus.

    Par contre, pour la partie interface, je peux changer.

    Mes applis sont des bases de données SQL (remplir des fiches, les présenter sous forme de tableaux, boutons, etc) J'ai été entrainé du côté de CLR mais s'il y a une meilleure solution, je suis preneur.

    Sachant que je vais avoir besoin de tracer des courbes, donc quadrillages, repères, zoom, etc

    En te remerciant pour tes conseils.

  9. #9
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    Citation Envoyé par famjerom Voir le message
    Je te passe les détails, mais j'en suis arrivé à devoir choisir entre python et C#. Ca été serré et j'ai choisi python et je ne reviendrais pas dessus.

    Par contre, pour la partie interface, je peux changer.
    C'est justement là où je voulais en venir.
    Tu as choisi python mais tu l'utilises pour produire du code C#.
    Du coup c'est comme si, tu n'avais pas fait de choix.

    Puisque ton choix s'est portée sur Python, je te suggère d'utiliser les librairies telles que :
    • TKinter, qui est assez simple à prendre en main mais limitée (quoi que ça devrait suffire pour ce que tu veux faire)
    • Qt, qui est très complexe mais très complet
    • WX que je n'ai jamais utilisé donc je ne saurai pas te dire ce que ça vaux.


    Le Forum GUI de python est plutôt actif si tu as des questions :
    https://www.developpez.net/forums/f1...es/python/gui/

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup.

    J'utilise déjà QT pour l'impression donc je vais approfondir.

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

Discussions similaires

  1. Erreur If Then, saisie dans certaines cellules obligatoire
    Par AmbreM dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/09/2013, 16h30
  2. Erreur 1004 dans la saisie de données
    Par gds35 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/03/2009, 10h17
  3. Réponses: 2
    Dernier message: 19/09/2007, 14h51
  4. [Erreur dans la lib...]
    Par Gonath dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/12/2003, 09h02
  5. Erreur dans l'utilisation de SWAP
    Par mire dans le forum Langage
    Réponses: 12
    Dernier message: 15/03/2003, 21h39

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