Bonjour,
Voilà je charge un UserControl dans un TabControl positionné dans un Form, dans ce UserControl je charge toutes les listes déroulantes au moment de son chargement avec des data issues d'un BD.
Le chargement de ce UserControl s'effectue avec une méthode asynchrone afin de ne pas figé l'IHM de l'application, toutes mes listes se chargent donc sauf une qui doit aider l'utilisateur quant au choix de sa saisie (il tape N et lui est proposer Nantes directement dans la Combo, si il tape Nam il lui est proposer Namur, ...) j'ai donc affecté la propriété AutoCompleteMode à la Combo, sauf qu'avec cette propriété j'ai une levé d'Exception m'indiquant qu'il faut que j'ajoute l'attribut STAThread à la méthode Main et c'est déjà le cas.
Voici mon Code :
Ca plante ici :
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 public delegate void ChargerListesDelegate(object sender, EventArgs e); public partial class UserControlBiens : UserControlMaster { private ChargerListesDelegate chargerListes; private IAsyncResult async; public UserControlBiens() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; chargerListes = new ChargerListesDelegate(AlimControls); } ... private void UserControlBiens_Load(object sender, EventArgs e) { async = chargerListes.BeginInvoke(sender, e, null, null); } private void AlimControls(object sender, EventArgs e) { statutComboBox.DataSource = ApplicationController.ReferentielRules.FindListReferentielByTypeReferentielName(messagesUI.Referentiel_Statut); statutComboBox.DisplayMember = "libelle"; transactionComboBox.DataSource = ApplicationController.ReferentielRules.FindListReferentielByTypeReferentielName(messagesUI.Referentiel_Transaction); transactionComboBox.DisplayMember = "libelle"; residenceComboBox.DataSource = ApplicationController.ReferentielRules.FindListReferentielByTypeReferentielName(messagesUI.Referentiel_Adresse_Site); residenceComboBox.DisplayMember = "libelle"; typeComboBox.SelectedIndexChanged -= new EventHandler(typeComboBox_SelectedIndexChanged); typeComboBox.DataSource = ApplicationController.ReferentielRules.FindListReferentielByTypeReferentielName(messagesUI.Referentiel_Type); typeComboBox.DisplayMember = "libelle"; typeComboBox.SelectedIndexChanged += new EventHandler(typeComboBox_SelectedIndexChanged); sousTypeComboBox.DataSource = ApplicationController.ReferentielRules.FindAllByReferentiel((Referentiel)typeComboBox.SelectedItem); sousTypeComboBox.DisplayMember = "libelle"; typeComboBox_SelectedIndexChanged(sender, e); TComboBox.DataSource = ApplicationController.ReferentielRules.FindListReferentielByTypeReferentielName(messagesUI.Referentiel_T); TComboBox.DisplayMember = "libelle"; villeComboBox.SelectedIndexChanged -= new EventHandler(villeComboBox_SelectedIndexChanged); villeComboBox.DataSource = ApplicationController.VilleRules.FindAll(); villeComboBox.DisplayMember = "Nom"; villeComboBox.AutoCompleteMode = AutoCompleteMode.Suggest; villeComboBox.AutoCompleteSource = AutoCompleteSource.ListItems; villeComboBox.SelectedIndexChanged += new EventHandler(villeComboBox_SelectedIndexChanged); villeComboBox_SelectedIndexChanged(sender, e); chargerListes.EndInvoke(async); } private void villeComboBox_SelectedIndexChanged(object sender, EventArgs e) { codePostalMaskedTextBox.Text = ((Ville)villeComboBox.SelectedItem).CodePostal; }
Voici l'Exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 villeComboBox.AutoCompleteMode = AutoCompleteMode.Suggest; villeComboBox.AutoCompleteSource = AutoCompleteSource.ListItems;
Le Main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Une exception de première chance de type 'System.Threading.ThreadStateException' s'est produite dans System.Windows.Forms.dll Le thread actuel doit être en mode STA (Single Thread Apartment) avant que des appels OLE puissent être effectués. Assurez-vous que votre fonction Main est marquée comme STAThreadAttribute.
Merci pour le coup de main
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 static class Program { /// <summary> /// Point d'entrée principal de l'application. /// </summary> [STAThread] static void Main() { ApplicationController.InitContext(); ApplicationController.GetApplicationController(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form2()); Application.Run(new FormMaster()); }
Partager