Laden...
S
Stryder
myCSharp.de - Member
5
Themen
26
Beiträge
Letzte Aktivität
vor 12 Jahren
Dabei seit
02.02.2008
Erstellt vor 12 Jahren

So, Alarm zurück...
im Constructor stand noch versteckt ein

dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader

Die Einstellung aus dem Designer wurde also immer überschrieben, jetzt klappt es. 👍

Vielen Dank für den Tipp!

Erstellt vor 12 Jahren

Habe mit der Einstellung herumgespielt und jeden Wert einmal durchgetestet, aber leider kann ich weiterhin nur die Höhe Anpassen und die Breite dieser ersten "Auswahlspalte" ganz links.

Hier ein Ausschnitt aus dem Code wie die Daten an das Datagridview gebunden sind:


private DataSet dataset = new DataSet();
private DataTable original_data = new DataTable("Original Data");
private BindingSource bsource = new BindingSource();


original_data.Columns.Add("Test", typeof(string));
dataset.Tables.Add(original_data);

[...]

bsource.DataSource = dataset.Tables["Original Data"];
dataGridView1.DataSource = bsource;
[...]


Erstellt vor 12 Jahren

Vielen Dank erst einmal für deine Antwort.
Vielleicht habe ich das mit dem Cursor Symbol auch nur falsch im Kopf, aber genau diese Funktion von der du sprichst mit der man zwischen zwei Spalten die Breite anpasst funktioniert nicht.

Einzig bei der aller ersten Spalte (in deinem Screenshot mit dem schwarzen Pfeil) geht das. Diese Funktion hätte ich nun auch gerne bei den anderen Spalten.

Erstellt vor 12 Jahren

Ich habe ein Datagridview welches mit einer Bindingsource und einem DataSet gebunden ist.

Die Spalten werden über die Datentabelle im Dataset definiert.
Leider erscheint im Datagridview kein Pfeil um die Spaltenbreite von Hand anzupassen.

Gibt es da einen Trick diese Funktion auch bei einem datengebundenen Datagridview zu aktivieren?

AllowUserToResizeColumns ist an.
Auch ansonsten habe ich schon alles mögliche probiert ohne Erfolg.

Erstellt vor 13 Jahren

Gibt es zur Anzeige eines Videos auf einer anderen Form also keine andere Möglichkeit als einen Stream mit bytes oder ähnlichem auszutauschen?

Erstellt vor 13 Jahren

Ich habe mal wieder ein Problem zu dem ich einfach keine Lösung finde... 🙁

Ich habe zwei Forms (jeweils Plugins von einem Hauptprogramm, dass ich nicht selber geschrieben habe)

Dort gibt es die Möglichkeit zwischen Plugins Daten in Form von strings auszutauschen.

Das Ziel ist es ein Video das in Form2 bekannt ist und erzeugt wird in Form 1 anzuzeigen.
Dazu wollte ich das Handle eines Panel das in Form1 erstellt wurde von Form 2 abrufen lassen.

Leider bekommt man aber so keinen Zugriff. Hat jemand eine Idee?


string handlestr = DX_echangePluginData("Form1", "getPanelHandle", "Panel");

IntPtr handle = new IntPtr(Convert.ToInt32(handlestr, 16));

MessageBox.Show(handle.ToString());
Control cPanel = Control.FromHandle(handle);
if (cPanel != null)
{
     Panel vPanel = (Panel)cPanel;
     if (vPanel != null)
     {
         vPanel.Controls.Add(pb);
     }
     else
         MessageBox.Show("vpanel is null");
}
else
    MessageBox.Show("cpanel is null");

Das Ergebnis ist das die erste MessageBox das Handle ausgibt:
z.B.: 2508952

cPanel kann dann bereits nicht mehr aus dem Handle erstellt werden.
Sodass ich dort "cpanel is null" ausgegeben bekomme.

Hat jemand eine Idee wie ich das lösen kann?

Erstellt vor 14 Jahren

Das "Problem ist" eigentlich das der User mit einer xml Datei das Layout der Ausgabe bestimmt.

Das heißt: Er kann dort Positionen eingeben wo dann die einzelnen Werte (die er selber aussuchen kann) erscheinen sollen.

So sieht das dann aus

<Content type="Text" position="1;58" datasource="MEDIA" style="Text2">{Artist}</Content>

Was ich dabei nicht bedacht habe, ist, dass fast ausschließlich immer genau ein Tag dort steht, sodass in meinen Augen die Regex Variante wenig sinn macht.
Dazu kommt, dass ich alle möglichen Strings auch im Vorhinein kenne, sodass auch dort der Vorteil der Regex Variante flach fällt.

Wovon ich mir jetzt aber einen größeren Performanceschub erhoffe ist folgendes: Ich abonniere die nächstes / vorheriges Lied Events und rufe dann einmal aus der SDK die Werte Titel, Interpret usw. ab.
Erst beim Songwechsel beginnt das Spiel von neuem.

Dann brauch ich schonmal nur die Sachen wir Spieldauer, Uhrzeit usw. jedes Mal abrufen.

Erstellt vor 14 Jahren

Ja das stimmt, die sind ja auch alle um 5 verschoben.

Ich werde jetzt mal deinen Vorschlag umsetzten. Davon erhoffe ich mir am meisten.
Muss mich nur mal jetzt mit dem Regex auseinandersetzen, damit ich das hinbekomme das er alle Wörter mit geschweiften Klammern herausfiltert.

//Edit: Der Vollständigkeit halber hier das Regex Pattern "{.*}"

//Edit2: So habe jetzt eine eigene Klasse geschrieben die die Zeit genauer misst, wie Th69 vorgeschlagen hat.

Durchgänge habe ich 100.000 gewählt.

Variante1: Regex + Dictionary + Stringbuilder.Replace
=> Deutlich am langsamsten: 12,6994 Sekunden

Variante2: String.Contains + Stringbuilder.Replace
=> 2,2458 Sekunden

Variante3: String.Contains + String.Replace
=> 1,74401 Sekunden

Das einzige was ich hierbei noch nicht testen konnte waren die Abfragen mit dem SDK. Ich habe jetzt nur Dummy Werte zum ersetzen genommen.

//Edit3: Ich habe nun noch eine weitere Möglichkeit getestet, nämlich
String.Contains + String.Replace + Dictionary.

Das gruppiert sich wie erwartet, zwischen Variante 2 und 3 und ist damit zwar nicht die allerschnellste Variante, dafür aber die vom Code her sauberste.

Erstellt vor 14 Jahren

Oh das hab ich ganz übersehen.

Das heißt das ist: 0,0000585568051407115 richtig?

Dann ist die Methode also auf jeden fall schon deutlich schneller... 👍

Erstellt vor 14 Jahren

Ok, das wäre dann die Messung hier:
Das habe ich dann eine weile im normalen Ablauf laufen lassen und mir dann die Log Datei angeschaut.



HiPerfTimer pt = new HiPerfTimer();

pt.Start();
StringBuilder a = new StringBuilder(text);

a.Replace("{Artist}", SDK_getValue("CurrentMedia.Artist"));
a.Replace("{Title}", SDK_getValue("CurrentMedia.Title"));
a.Replace("{Album}", SDK_getValue("CurrentMedia.Album"));
a.Replace("{Position}", SDK_getValue("CurrentMedia.Position"));
a.Replace("{Duration}", SDK_getValue("CurrentMedia.Duration"));
a.Replace("{Mode}", SDK_getValue("CurrentMedia.Mode"));

string wurst = a.ToString();
pt.Stop();
WriteLog("Stringbuilder: " + pt.Duration.ToString());

pt.Start();
StringBuilder c = new StringBuilder(text);
if (text.Contains("{Artist}"))
 c.Replace("{Artist}", SDK_getValue("CurrentMedia.Artist"));
                                                                
if (text.Contains("{Title}"))
c.Replace("{Title}", SDK_getValue("CurrentMedia.Title"));
                                                                
if (text.Contains("{Album}"))
c.Replace("{Album}", SDK_getValue("CurrentMedia.Album"));
                                                                
if (text.Contains("{Position}"))
c.Replace("{Position}", SDK_getValue("CurrentMedia.Position"));
                                                                
if (text.Contains("{Duration}"))
c.Replace("{Duration}", SDK_getValue("CurrentMedia.Duration"));
                                                                
if (text.Contains("{Mode}"))
c.Replace("{Mode}", SDK_getValue("CurrentMedia.Mode"));

string wurst2 = c.ToString();
pt.Stop();
WriteLog("Stringbuilder-Contains: " + pt.Duration.ToString());

pt.Start();
if (text.Contains("{Artist}"))
text = text.Replace("{Artist}", SDK_getValue("CurrentMedia.Artist"));

if (text.Contains("{Title}"))
text = text.Replace("{Title}", SDK_getValue("CurrentMedia.Title"));

if (text.Contains("{Album}"))
 text = text.Replace("{Album}", SDK_getValue("CurrentMedia.Album"));

                                                             
if (text.Contains("{Position}"))
 text = text.Replace("{Position}", SDK_getValue("CurrentMedia.Position"));

if (text.Contains("{Duration}"))
text = text.Replace("{Duration}", SDK_getValue("CurrentMedia.Duration"));

if (text.Contains("{Mode}"))
 text = text.Replace("{Mode}", SDK_getValue("CurrentMedia.Mode"));

pt.Stop();
 WriteLog("Contains und Replace: " + pt.Duration.ToString());

Also beim Dictionary hab ich doch auch wieder das Problem, dass ich jeden Wert erst von dem SDK abrufen muss um sie einzuspeichern?

Mappingtabelle hab ich ehrlich gesagt noch nie benutzt, das müsste ich mir dann mal ansehen.

Das ist wohl eher unperformant, was?

foreach (string placeholder in placeholders)
{
    if (placeholder = "{Artist}")
       ...
    else if (placeholder = "{Title}")
     ...
}