Autor Beitrag
MCPC10
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win 10, Win Server 2016
C# (VS 2015, VS2017, VS2019), Assembler (Atmel Studio 7.0)
BeitragVerfasst: Sa 09.07.16 19:20 
Guten Tag erstmal :) ,

Ich habe ein Problem in WPF, dass wenn ich SharpDX.DirectInput Nutze und den Namen in der Combobox anzeigen möchte, dass diese zwar den Namen anzeigt, aber auch Kästchen dahinter macht (siehe Anhang). Ich verzweifle schon mehrere Tage an diesem Problem :( . Ich hoffe sehr das ihr mir helfen könnten. Wenn ihr weitere Infos benötigt, müsst ihr es nur sagen :) .
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 09.07.16 19:46 
Hallo,

zeig' mal den Code mit dem du die TextBox füllst (ich tippe darauf, daß du einen aus C oder C++ nullbasierten Text hast und diesen nicht korrekt nach string konvertierst).
MCPC10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win 10, Win Server 2016
C# (VS 2015, VS2017, VS2019), Assembler (Atmel Studio 7.0)
BeitragVerfasst: Sa 09.07.16 21:37 
Die Klasse:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
internal Joystick[] GetDevice()
        {
            var devices = new List<Joystick>();

            foreach (var device in directInput.GetDevices(DeviceClass.GameControl, DeviceEnumerationFlags.AttachedOnly))
            {
                try
                {
                    Joystick joy = new Joystick(directInput, device.InstanceGuid);
                    devices.Add(joy);
                }
                catch (Exception)
                {
                    return null;
                }
            }

            return devices.ToArray();          
        }


Die Init der Combobox:

ausblenden C#-Quelltext
1:
2:
3:
4:
internal void InitCombobox(){
    comboBoxLenkrad.ItemsSource = GetDevice();
    comboBoxJoystick.DisplayMemberPath = "Properties.ProductName";
}


Der Aufruf:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 private void comboBoxJoystick_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //  MessageBox.Show(core.SetupJoystick(comboBoxJoystick.SelectedItem as JoyInfo, Joysticks.JoystickType.joystick).ToString());
            Joystick joy = (Joystick) comboBoxJoystick.SelectedItem;

            joy.Acquire();
            JoystickState joyState = new JoystickState();
            joy.GetCurrentState(ref joyState);
            MessageBox.Show(joyState.X.ToString());
        }


Danke für deine schnelle Antwort :)

Moderiert von user profile iconTh69: Full-Quote entfernt.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 10.07.16 10:24 
Laß dir mal in der GetDevice(s) Methode den Namen ausgeben:
ausblenden C#-Quelltext
1:
string name = joy.Properties.ProductName;					

(entweder per Debugger anschauen oder aber als MessageBox o.ä.).
Wenn der dort auch schon falsch ist, dann sehe ich dies als Fehler in der SharpDX-Implementierung: SharpDX /Source/SharpDX.DirectInput/DeviceProperties.cs

Hast du denn die neueste SharpDX-Version?

Wenn du das selber korrigieren möchtest (da du ja - korrekterweise - Data-Binding benutzt), müßtest du eine eigene Klasse erstellen und von Joystick ableiten und dort dann eine eigene Eigenschaft erstellen, welche die Stellen ab dem ersten Nullzeichen entfernt, s. z.B. C# - Trimming string from first null terminator and onwards.
MCPC10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win 10, Win Server 2016
C# (VS 2015, VS2017, VS2019), Assembler (Atmel Studio 7.0)
BeitragVerfasst: So 10.07.16 13:37 
- Also ich habe es jetzt mit einer MessageBox getestet und der Name wurde Korrekt dargestellt. (Wie macht man sowas mit dem Debugger ?)

- Ja ich habe die neuste SharpDX Version

- Ähh, wie leitet man KLassen ab und fügt sowas hinzu, denn ich bin recht neu in C# und kenne so was noch nicht :)

Nochmal Danke für die schnelle Antwort :)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 10.07.16 14:31 
Hier ein kurzes Tutorial: Debugging (Stichwörter: breakpoint, watch (locals)).

Vllt. unterdrückt aber auch die MessageBox diese Zeichen, aber der Debugger sollte dir den kompletten String anzeigen (einfach 'breakpoint' setzen und wenn das Programm dann dort anhält, kannst du mit der Maus über den Variablennamen gehen und es wird der Inhalt als Tooltip angezeigt).

Ableiten ginge z.B. so
ausblenden C#-Quelltext
1:
2:
3:
4:
public class MyJoystick : Joystick
{
  // hier dann die eigene Methode oder Eigenschaft
}

Du müßtest dann in deiner GetDevices-Methode überall dann MyJoystick benutzen und bei Binden an die ComboBox dann den Namen deiner Eigenschaft hinsetzen.

Für diesen Beitrag haben gedankt: MCPC10
MCPC10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win 10, Win Server 2016
C# (VS 2015, VS2017, VS2019), Assembler (Atmel Studio 7.0)
BeitragVerfasst: So 10.07.16 17:01 
So damit hat es jetzt funktioniert :)
Musste das mal verstehen: Compiler Error CS1729

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
        public class MyJoystick : Joystick
        {
            private string TrimFromZero(string input)
            {
                int index = input.IndexOf('\0');
                if (index < 0)
                    return input;

                return input.Substring(0, index);
            }

            public override string ToString()
            {
                return TrimFromZero(Properties.ProductName);             
            }

            public MyJoystick(DirectInput directInput, Guid deviceGuid) : base(directInput, deviceGuid)
            {
                
            }
        }


Und Danke das du mir geholfen hast :)

Wenn mein Code "schlecht" ist, dann ruhig sagen. Ich will meine Fehler gerne Wissen :)

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 11.07.16 13:46 
Hallo,

dein Code ist ersteinmal aus meiner Sicht so in Ordnung. ;-)
Der Übersicht halber werden aber die Konstruktoren meist als erstes in der Klasse definiert.

Wenn dies damit für dich erledigt ist, wäre es schön, wenn du den Status hier auf "Frage beantwortet" setzen würdest (einfach deinen Eingangsbeitrag editieren).
MCPC10 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win 10, Win Server 2016
C# (VS 2015, VS2017, VS2019), Assembler (Atmel Studio 7.0)
BeitragVerfasst: Di 12.07.16 13:52 
Vielen Dank für deine Hilfe :)