Laden...
J
Joltan myCSharp.de - Member
Diletant Exil-Badener Dabei seit 07.12.2004 58 Beiträge
Benutzerbeschreibung

Forenbeiträge von Joltan Ingesamt 58 Beiträge

07.08.2008 - 12:28 Uhr

Genau. Eigentlich erwarte ich, daß die Items analog der 'Miniaturansicht' im Explorer nebeneinander abgelegt, und am Zeilenende in die nächste Zeile umgebrochen wird. Die Items sind derzeit 130 breit, und das Listview ist über 500 breit - da sollte also genug Platz sein.

Mag sein, dass mir hierzu noch der entscheidende Eintrag in der XML fehlt, aber ich komm einfach nicht drauf. Habe auch schon unterschiedliche Werte für das Orientation-Attribut versucht, und auch mal alle Attribute beim WrapPanel weggelassen - nichts hilft... 🙁

07.08.2008 - 12:00 Uhr

Ja klar, das sieht man ja an meinem Screenshot an dem markierten ListViewItem. Nur, wenn ich das ItemsPanelTemplate auf WrapPanel setze, dann müßten die Elemente doch auch entsprechend angeordnet werden, oder? Jedenfalls wird das WrapPanel verwendet v- wenn ich dessen Orientation ändere, dann werden die Elemente nämlich auch entsprechend aufgelistet - nur der 'Zeilenumbruch' (also die Hauptfunktion eines WrapPanel) funktioniert eben nicht.

07.08.2008 - 09:35 Uhr

Hallo, ich versuche die ListViewItems in einem ListView in einem WrapPanel anzuordnen. Ich habe dieses als ItemsPanelTemplate hinzugefügt, aber irgendwie werden meine Elemente nicht entsprechend angeordnet (siehe Bild unten). Was könnte das Problem sein? Der alte Thread zu diesem Thema hat mir leider nicht wirklich weitergeholfen. 🙁

Hier der Ausschnitt aus der XML des Dialogs:

<GroupBox Name="grpSources" Header="Source Images" Margin="0,0,0,5" Width="512">
    <StackPanel Orientation="Vertical">
        <ListView  Name="lvImages" Height="200" VerticalAlignment="Stretch">
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Vertical" IsItemsHost="True"></WrapPanel>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        </ListView>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,8,0">
            <Label HorizontalAlignment="Center" Margin="0,0,5,0">Source Folder</Label>
            <TextBox Name="txtInputPath" Width="260"/>
            <Button Name="btnSelectSourceFolder">...</Button>
        </StackPanel>
    </StackPanel>
</GroupBox>

25.06.2008 - 18:47 Uhr

Da es nicht meine COM-Komponente ist, habe ich heute erstmal einen Bugreport an den Hersteller geschickt. Ich selbst instanziere lediglich ein Objekt - den zusätzichen Prozess erzeugt diese selbstständig. Der Witz ist ja, dass auch in diesem neuen Prozess der Benutzer richtig ist, und auch die Umgebungsvariablen (außer TEMP, TMP und TEMPDIR) stimmen - lediglich die Systempfade (also alle über System.Environment abrufbaren Pfade wie Anwendungsverzeichnis, Eigene Dateien, etc.) sind falsch und verweisen auf ein Unterverzeichnis von system32...

25.06.2008 - 09:55 Uhr

Eine kleine Korrektur sollte ich vieleicht dringend nachschieben: das obige gilt nur für geplante Tasks, die ausgeführt werden, wenn der entsprechende Nutzer nicht angemeldet ist (Subject und bisherige Beiträge entsprechend korrigiert). Habe es gerade mal getestet, und für Dienste gilt, daß dort im Service das richtige Environment geladen ist - in dem Fall ist wohl eher die von mir instanzierte COM-Komponente (die wiederum einen seperaten Prozess instanziert, welche dann wiederum das falsche Environment verwendet) schuld.

25.06.2008 - 07:35 Uhr

Vieleicht weil der MSIL-Code beim ersten Code-Durchlauf erstmal compiliert werden muss? Hast Du das berücksichtigt? Außerdem kannst Du die tatsächliche Performance nur dann wirklich testen, wenn Du's mehrfach hintereinander ausführst und die kürzeste gemessene Zeit verwendest - in dem Moment, wo zwischendurch andere Tasks in System rödeln, geht das natürlich (Dualcore oder nicht) irgendwo von der für Deinen Code verfügbaren Rechenleistung ab. Bei Schleifen, die groß genug sind, wird letzteres aber zwangsläufig immer auftreten, und damit das Ergebnis negativ beeinflussen.

Und, das muss vieleicht auch gesagt werden: Dein Rechner (wahrscheinlich ein Notebook) ist nur mit 1.6GHz getaktet - das ist natürlich relativ langsam.

25.06.2008 - 07:08 Uhr

Ja, genau das mache ich ja bereits. Der geplante Task läuft auch unter dem entsprechenden Nutzeraccount, nur leider zeigt z.B. das Anwendungsdatenverzeichnis trotzdem auf den Default User.

Wie bereits oben beschrieben tritt das Phänomen bei geplanten Tasks, die unter meinem Account laufen, nur dann auf, wenn ich zum Ausführungszeitpunkt nicht selbst angemeldet bin. Lässt sich recht einfach nachvollziehen mit einem einfachen Konsolenprogramm, welches einfach ein paar Environment-Einträge loggt.

Wenn ich den code manuell ausführe, oder während der Ausführung des geplanten Task angemeldet bin:

Current User: MYDOM\myuser
App Data (roaming): C:\Dokumente und Einstellungen\myuser\Anwendungsdaten
App Data (local): C:\Dokumente und Einstellungen\myuser\Lokale Einstellungen\Anwendungsdaten
Logical drives: C:, L:, Q:\

Wenn ich nicht angemeldet bin:

Current User: MYDOM\myuser
App Data (roaming): C:\Dokumente und Einstellungen\Default User\Anwendungsdaten
App Data (local): C:\Dokumente und Einstellungen\Default User\Lokale Einstellungen\Anwendungsdaten
Logical drives: C:\

25.06.2008 - 00:45 Uhr

Wie kann ich bei einem geplanten Task sicherstellen, daß auch tatsächlich das Environment (also z.B. Anwendungsdatenverzeichnis, verbundene Laufwerke, Umgebungsvariablen, etc.) des Nutzers verwendet werden, unter dessen Login der Code ausgeführt wird?

Wie ich feststellen musste, gilt das bei geplanten Tasks nur, wenn der Benutzer selbst während der Ausführung gerade eingeloggt ist (getestet unter XP SP3)...

Gibt es eine Möglichkeit die korrekten Einstellungen für den aktuellen Prozess im Code nachzuladen?

12.12.2007 - 17:19 Uhr

An dem Beispiel (bzw. dem .Net 3.5 Pendant aus der lokal installierten MSDN) habe ich mich orientiert. Ich werde das heute abend wohl nochmals Schritt für Schritt durchgehen müssen um eventuelle Unterschiede abzuklären. Der StackTrace war für mich als WPF-Laien reichlich unergiebig, da ja 'nur' System-DLLs enthalten waren, und ich mit den Innereien von WPF noch nicht sonderlich vertraut bin:

PresentationFramework.dll!System.Windows.Controls.ItemContainerGenerator.DoLinearSearch(ref System.Windows.DependencyObject container = null, ref object item = {System.Data.DataRowView}, out int itemIndex = 0) + 0x1e bytes
PresentationFramework.dll!System.Windows.Controls.ItemContainerGenerator.ContainerFromItem(object item) + 0x26 bytes
PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.ItemSetIsSelected(object item = {System.Data.DataRowView}, bool value = false) + 0x33 bytes
PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.SelectionChanger.CreateDeltaSelectionChange (System.Collections.Generic.List<object> unselectedItems = Count = 0, System.Collections.Generic.List<object> selectedItems = Count = 0) + 0x11c bytes
PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.SelectionChanger.End() + 0x59 bytes
PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.SelectionChanger.SelectJustThisItem(object item, bool assumeInItemsCollection) + 0x12c bytes
PresentationFramework.dll!System.Windows.Controls.ListBox.MakeSingleSelection(System.Windows.Controls.ListBoxItem listItem = {System.Windows.Controls.ListViewItem: System.Data.DataRowView}) + 0x71 bytes
PresentationFramework.dll!System.Windows.Controls.ListBox.NotifyListItemClicked(System.Windows.Controls.ListBoxItem item, System.Windows.Input.MouseButton mouseButton) + 0x227 bytes
PresentationFramework.dll!System.Windows.Controls.ListBoxItem.HandleMouseButtonDown(System.Windows.Input.MouseButton mouseButton) + 0x33 bytes
PresentationFramework.dll!System.Windows.Controls.ListBoxItem.OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e) + 0x2a bytes
PresentationCore.dll!System.Windows.UIElement.OnMouseLeftButtonDownThunk(object sender, System.Windows.Input.MouseButtonEventArgs e) + 0x6c bytes
PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x27 bytes
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x68 bytes
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {System.Windows.Controls.ListViewItem: System.Data.DataRowView}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = true) + 0x10f bytes
PresentationCore.dll!System.Windows.UIElement.ReRaiseEventAs(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, System.Windows.RoutedEvent newEvent) + 0x156 bytes
PresentationCore.dll!System.Windows.UIElement.OnMouseDownThunk(object sender, System.Windows.Input.MouseButtonEventArgs e) + 0xc2 bytes
PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x27 bytes
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x68 bytes
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {System.Windows.Controls.Border}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = false) + 0x10f bytes
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) + 0xa2 bytes
PresentationCore.dll!System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool trusted) + 0x43 bytes
PresentationCore.dll!System.Windows.Input.InputManager.ProcessStagingArea() + 0x200 bytes
PresentationCore.dll!System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs input) + 0x5e bytes
PresentationCore.dll!System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport inputReport) + 0x64 bytes
PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.ReportInput(System.IntPtr hwnd, System.Windows.Input.InputMode mode, int timestamp, System.Windows.Input.RawMouseActions actions, int x, int y, int wheel) + 0x32e bytes
PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.FilterMessage(System.IntPtr hwnd, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 3211402, ref bool handled = false) + 0x209 bytes
PresentationCore.dll!System.Windows.Interop.HwndSource.InputFilterMessage(System.IntPtr hwnd = 134110, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 3211402, ref bool handled = false) + 0x76 bytes
WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd = 134110, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 3211402, ref bool handled = false) + 0x87 bytes
WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) + 0x62 bytes
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback = {Method = {System.Object DispatcherCallbackOperation(System.Object)}}, object args = {MS.Win32.HwndSubclass.DispatcherOperationCallbackParameter}, bool isSingleParameter = true) + 0x4a bytes
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source = {System.Windows.Threading.Dispatcher}, System.Delegate callback, object args, bool isSingleParameter, System.Delegate catchHandler = null) + 0x3f bytes
WindowsBase.dll!System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, bool isSingleParameter) + 0x14f bytes
WindowsBase.dll!System.Windows.Threading.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority priority, System.Delegate method, object arg) + 0x3d bytes
WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd = 134110, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 3211402) + 0x1e0 bytes
[Native to Managed Transition]
[Managed to Native Transition]
WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame = {System.Windows.Threading.DispatcherFrame}) + 0x144 bytes
WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame frame) + 0x83 bytes
WindowsBase.dll!System.Windows.Threading.Dispatcher.Run() + 0x75 bytes
PresentationFramework.dll!System.Windows.Application.RunInternal(System.Windows.Window window) + 0x78 bytes
PresentationFramework.dll!System.Windows.Application.Run(System.Windows.Window window) + 0x29 bytes
PresentationFramework.dll!System.Windows.Application.Run() + 0x16 bytes
DSSQ4ArmA.exe!DSSQ4ArmA.App.Main() + 0x4c bytes C#
[Native to Managed Transition]
[Managed to Native Transition]
mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x39 bytes
Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() + 0x2b bytes
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x3b bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x81 bytes
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x40 bytes

12.12.2007 - 15:09 Uhr

Ja, tun sie - wie gesagt, die GridView wird ja auch, solange ich sie nicht 'anfasse', problemlos gefüllt und aktualisiert. Jedem Path steht ein entsprechend benanntes Property in den Rows meiner DataTable-Klasse gegenüber. Auf Tippfehler habe ich bereits geprüft.

Edit: Ich sollte vieleicht anmerken, das es nur beim Resizen, bzw. wenn ich in den Datenbereich klicke (aber z.B. nicht beim Anklicken der ColumnHeaders), knallt.

12.12.2007 - 13:50 Uhr

Hallo, ich habe ein ListView, welches über ein GridView und DataBinding mit dem Inhalt eines (sich in regelmäßigen Abständen selbst aktualisierenden) DataTables verbunden ist. Soweit so gut, der Inhalt wird fein angezeigt, und auch automatisch aktualisiert, wenn sich Änderungen in der DataTable ergeben. Ich kann den gesamten Dialog verschieben, oder auch die restlichen GUI-Elemente benutzen, wie ich möchte - alles kein Problem.

Sobald ich es aber wage den Dialog in der Größe zu ändern (Minimieren und Wiederherstellen geht!), oder auf die dumme Idee komme in das ListView zu klicken, knallt mir der Dialog mit der Meldung "An unhandled exception of type 'System.NullReferenceException' occurred in PresentationFramework.dll" raus. Ich habe keinen eigenen Code, der diese Events behandelt, so daß ich auf den ersten Blick meine Hände in Unschuld wasche. Auf den zweiten liegt es wahrscheinlich an meinem XAML-Code, aber da bin ich wohl auf Eure Hilfe angewiesen:


        <ListView Margin="0,0,0,25" Name="lvServerData" SelectionMode="Extended">
            <ListView.View>
                <GridView AllowsColumnReorder="True">

                        <GridViewColumn 
                            DisplayMemberBinding="{Binding Path=Name}"
                            Header="Name" Width="150"
                            />
                        <GridViewColumn
                            DisplayMemberBinding="{Binding Path=Players}" 
                            Header="Players" Width="50"
                            />
                    <GridViewColumn 
                            DisplayMemberBinding="{Binding Path=LastPing}" 
                            Header="Ping" Width="60" 
                            />
                    <GridViewColumn 
                            DisplayMemberBinding="{Binding Path=Mission}" 
                            Header="Mission" Width="180"
                            />
                    <GridViewColumn 
                            DisplayMemberBinding="{Binding Path=Map}" 
                            Header="Map" Width="70"
                            />
                    <GridViewColumn 
                            DisplayMemberBinding="{Binding Path=Status}" 
                            Header="Status" Width="70"
                            />
                    <GridViewColumn 
                            DisplayMemberBinding="{Binding Path=Description}" 
                            Header="Info" Width="200"
                            />
                </GridView>
            </ListView.View>
        </ListView>

wobei ich im Konstruktor des Dialogs die ItemSource auf meinen Table setze:


lvServerData.ItemsSource = DataUpdater.Current.TypedServers;

Entwicklungsumgebung ist VS2008 Pro mit .Net Framework 3.5.

Vorschläge?

30.11.2007 - 10:14 Uhr

Hallo,

Gibt es Probleme, wenn ein Team mit einem Mix aus VS2005/VS2008 Professional via SourceSafe dieselbe Solution bearbeitet (C# .Net 2.0-Solution mit dutzenden Projekten und tausenden Klassen)? Hat sich da an den Solution-/Projektdateien etwas geändert? Wie ist das Zusammenspiel von VS2008 mit SourceSafe 2005?

Wir überlegen die Entwicklungsumgebung umzustellen, da in naher Zukunft auch die ersten Net 3.5-Projekte anlaufen werden. Aus organisatorischen Gründen ist es aber nicht wirklich möglich, daß alle Entwickler gleichzeitig switchen. Und die bestehenden .Net 2.0-Projekte sollen natürlich möglichst reibungslos weiterlaufen...

Eine Parallel-Installation wäre natürlich möglich, aber da VS2008 ja durchaus .Net 2.0-Solutions bearbeiten kann, wäre es natürlich schöner nur eine Entwicklungsumgebung verwenden zu können.

Hat damit schon jemand Erfahrungen gesammelt?

17.04.2007 - 12:50 Uhr

Habe es jetzt auf folgende Weise gelöst:


        Regex m_pRegexCRLF = new Regex(@"\r", RegexOptions.Compiled);
...
                foreach (CMatch pM in pF.Matches)
                {
                    s = (pM.Start > 0)
                        ? pM.Start - m_pRegexCRLF.Matches(pF.Text.Substring(0, pM.Start)).Count
                        : 0;
                    l = pM.Length - m_pRegexCRLF.Matches(pM.Match.Value).Count;
                    txtCurrentText.Select(s,l);
                    ...
                }
...

Den Regex kann ich einfach erweitern, sollten da noch weitere Zeichenfolgen verschluckt werden. CMatch ist ein Klasse, die ein normales Match-Objekt kapselt (für andere Sachen in meinem Programm benötigt). Die Hervorhebungen passen jetzt. 🙂

17.04.2007 - 11:30 Uhr

Bei Matches über mehrere Zeilen (und das von Match zu Match ev. auch noch unterschiedlich) hilft das natürlich nur eingeschränkt... Arf! 🙁
Ich hätte jetzt erwartet, daß es irgendwo die Möglichkeit gibt die 'wahre' Position im Ausgangsstring (bzw. umgekehrt) zu ermitteln, wenn schon solche Abweichungen existieren.

17.04.2007 - 11:07 Uhr

Hallo,

ich habe mir die hiesigen Threads zum Thema Highlighting in (Rich)TextBoxen durchgelesen. Konnte dort aber mein aktuelles Problem nicht finden.

Ich durchsuche Textfiles anhand eines Regex, und stelle dann den Inhalt in einer RichTextBox dar. Dabei ist es entscheidend, daß das Matching auf den Inhalt des Textfiles ausgeführt wird, und nicht auf den in der Textbox enthaltenen Text. Wenn ich nun mit Select(nStartPos,nLength) ein Match optisch hervorheben möchte, so habe ich bei einigen Files einen Versatz der Markierung, welcher umso größer wird, je weiter das Match im Dokument hinten liegt.

Meine Vermutung ist nun, daß die RichTextBox die Zeilenumbrüche (in den entsprechenden Dateien CR+LF) als ein einzelnes Zeichen zählt, während der Index des Match natürlich alle Zeichen berücksichtigt. Eventuell werden auch noch weitere (nicht darstellbare) Zeichen 'verschluckt'.

Wie kann ich die für die Selection passenden Index-/Length-Werte bekommen, ohne ein erneutes Matching auf den in der Textbox enthaltenen Text auszuführen (was aufgrund der obigen Besonderheit ggfs. zu abweichenden Ergebnissen führen könnte und daher für mich nicht akzeptabel ist)?

09.11.2006 - 13:46 Uhr

Habe gerade versucht mein Control entsprechend neu zeichnen zu lassen - dafür muss ich doch nur den Paint-Event abfangen und den Text in der entsprechenden Farbe reinzeichen, oder? Leider scheint es mir nicht möglich mich an den Event ranzuhängen:

((Control)this).Paint += delegate(object o,PaintEventArgs e)
 {
   base.OnPaint(e);
   System.Drawing.Brush b = new System.Drawing.SolidBrush(this.Enabled ? this.ForeColor : this.ForeColorDisabled);
   e.Graphics.DrawString(this.Text,this.Font,b,this.GetPositionFromCharIndex(0));
};

funktioniert leider nicht, da die Methode nie ausgeführt wird... Wo und wie muß ich mich da ranhängen?

09.11.2006 - 12:00 Uhr

Weil die ausgegrauten Controls schlecht lesbar sind, ich aber die aktuelle Auswahl trotzdem anzeigen will? Ich denke es ist eine Bug, wenn es mir nicht möglich ist die Farbe nachträglich zu ändern, kein Feature. Was ich jetzt suche ist ein funktionierender Workaround.

Das mit dem selber zeichnen ist wohl die einzige Möglichkeit (grundsätzlich kein Problem, da sowieso abgeleitete Klassen verwendet werden). Nur habe ich das noch nie gemacht, und wäre sehr dankbar, wenn mir jemand einen Fingerzeig geben könnte!

09.11.2006 - 11:30 Uhr

Mhhh, das war nicht was ich meinte - die Eingabe zu unterbinden ist ja nicht das Problem, sondern ich suche einen Weg bei einer gesperrten (enabled = false) Control die Textfarbe anpassen zu können - auch wenn es keine TextBox ist. Eine diesbezügliche Suche hier im Forum hat leider außer ein paar vagen Hinweisen nichts gebracht.

09.11.2006 - 09:53 Uhr

Gibt es ein Äquivalent für andere GUI-Elemente (z.B. DateTimePicker)? Die haben ja keine ReadOnly-Property... 🙁

28.07.2006 - 13:03 Uhr

Sehr nette Idee - eine kleine Frage hätte ich jedoch: Ich habe zu Testzwecken mal versucht ein Icon der system32\shell32.dll auszulesen:

this.Icon = (new StolenIcon.StolenIcon (61, System.Environment.SpecialFolder.System + @"system32\shell32.dll")).Icon;

liefert eine 'System.ArgumentException in System.Drawing.dll'. Wie muß ich richtig vorgehen?

21.09.2005 - 07:55 Uhr

Hab ich. Leider gab's da nur die Preise in US$ (i.e. deutlich unter den zu erwartenden Preisen in Euroland), und für die Pro-Version ohne MSDN-Abo findet sich auf den MS-Seiten auch nur der Hinweis auf die Händler (welche die Soft aber noch nicht im Angebot haben). 300 US$ für die Standard wäre ja ok, nur der Euro-Preis liegt sicher mindestens 30% darüber, wie ich Microsoft kenne...
🙁

21.09.2005 - 06:18 Uhr

Weiß eigentlich schon jemand die Preise für Deutschland? Insbesondere für die Standard bzw. Professional Edition (letztere ohne MSDN Subscription)? Und bleibt es bei November als Release-Termin?

05.04.2005 - 11:02 Uhr

Arf! Habe den Fehler gefunden (im Spiegel 8o)!

Das Form war 100% in Ordung - es lag an der Art, wie ich es aufgerufen habe!

05.04.2005 - 09:33 Uhr

Hier mal der Code für den NotifyIcon (von VS erstellt):


private System.Windows.Forms.NotifyIcon notifyIconServerView;
...
private void InitializeComponent()
{
   this.components = new System.ComponentModel.Container();
   ...
   this.notifyIconServerView = new System.Windows.Forms.NotifyIcon(this.components);
   this.SuspendLayout();
   ...
   this.notifyIconServerView.ContextMenu = this.contextMenu2;
   this.notifyIconServerView.Text = "ServerView";
   this.notifyIconServerView.Visible = true;
   this.notifyIconServerView.DoubleClick += new System.EventHandler(this.notifyIconServerView_DoubleClick);
   ...
}

Ansonsten gibt es noch ein paar stellen im Code die bei Bedarf die .Icon- und .Text-Eigenschaften anpassen.

05.04.2005 - 08:32 Uhr

Zuerstmal zum Hintergrund: mein Programm ist ein Server Monitor für Multiplayer-Spiele. Das MainForm zeigt dabei eine Liste aller in der Datenbank vorhandenen Server, wobei für jeden Server wahlweise auch noch ein zusätzliches Fenster geöffnet werden kann, welches zusätzliche Informationen und serverspezifische Funktionen bietet. Da verschiedene Spiele unterstützt werden, soll für diese ServerViews das entsprechende Icon angezeigt werden.

Wenn ich Deine Antwort richtig verstanden habe, dann müßte ich also das NotifyIcon beim Aufruf im MainForm definieren. Kann ich dann trotzdem noch das Icon von innerhalb der (in einem unabhängigen Thread laufenden) ServerView manipulieren? Die Definition des NotifyIcons wäre ja dann außerhalb des eigentlichen Objektes, oder? Geht das überhaupt?
🤔

Mit dem Code in deinem Verweis kann ich leider nicht allzuviel anfangen. Kontextmenü und Icon sind genau so (durch VS) im Construktor des ServerViews definiert - und außerhalb macht das ja nicht wirklich viel Sinn, oder?

04.04.2005 - 20:33 Uhr

Hallo,

ich habe ein Programm geschrieben, welches per NotifyIcon anstelle per Taskbar angezeigt wird. Funktioniert soweit auch einwandfrei, inkl. Kontextmenü. Nur wenn ich nun ein (in einem seperaten Thread ausgeführtes) View aus dem Hauptprogramm heraus öffne und dieses ebenfalls über ein NotifyIcon darstellen will, dann werden mir statt einem zwei Icons angezeigt. Beide verfügen über das Kontextmenü, bei einem finktionieren (abgesehen vom Öffnen des Kontextmenüs) keine Events.

Schließe ich das View, dann wird der eine (funktionierende) NotifyIcon korrekt gelöscht, der andere bleibt aber über das Schließen der Gesamtapplikation hinaus bestehen und läßt sich erst danach entfernen, indem ich mit der Maus darüberfahre.

Was könnte da schiefgelaufen sein? Habe nur in Visual Studio den NotifyIcon zum Form hinzugefügt, und dann das entsprechende Kontextmenü in den Eigenschaften ausgewählt...

Beim Hauptprogramm wird korrekterweise nur ein Icon angezeigt. Und das obwohl dort auch mehrere Threads gleichzeitig im Hintergrund laufen (ebenso wie in dem seperaten View).

14.03.2005 - 11:24 Uhr

das macht ja nichts, da ich ja dank der Überprüfung die Bytereihenfolge anpassen kann. Danke vielmals für die schnelle Hilfe!

14.03.2005 - 10:56 Uhr

Ist wahrscheinlich eine recht einfache Frage, finde hierzu aber gerade keine Lösung. Wie kann ich ein Byte-Array (4 Bytes, Little-Endian Format) in ein Int32 wandeln?

11.02.2005 - 11:10 Uhr

Bump!

Komme erst jetzt dazu mich wieder an die Arbeit zu machen, aber ich habe die Hoffnung noch nicht aufgegeben, daß sich noch irgendwo eine Möglichkeit findet die Audio-Dateien in die EXE einzubinden... Hat denn niemand diesbezüglich eine Idee?

04.02.2005 - 11:12 Uhr

Mhhh... keine Hinweise zur Problematik? VS bietet ja die Möglichkeit andere Audioformate (z.B. .wav) als Resourcen einzubinden. Das wäre selbstverständlich auch ok, da die Sounds sehr kurz sind. Das Problem diese der Audio-Klasse zuzuweisen bleibt aber bestehen.

01.02.2005 - 15:59 Uhr

Hallo,

Ich habe derzeit das Problem, daß ich ein paar Signaltöne, welche mein Programm via AudioVideoPlayback abspielt in die Exe als Resource einbinden möchte. Mit Icons klappt das ja wunderbar, nur akzeptiert die Audio-Klasse den internen Verweis leider nicht. Gibt es da eine Lösung?

22.01.2005 - 17:58 Uhr

*Bump*

Ist außer der Unterstellung etwas Illegales vorzuhaben vieleicht auch ein konstruktiver Hinweis zur erfragten Thematic zu haben? Wie gesagt, alles was ich bräuchte wäre ein Hinweis ob (und wenn ja, wie) ich in C# den abgehenden Port festlegen kann.

21.01.2005 - 16:03 Uhr

Gerade die Bestätigung erhalten: Funzt! 🙂

Danke vielmals!

21.01.2005 - 09:58 Uhr

Danke für den Tip, ich hoffe daß es mit dem Installer klappt (sieht soweit jedenfalls schon mal ganz gut aus) - ist jedenfalls einfacher (und kleiner) als den ganzen 3mb großen MDX-Installer hinzuzupacken, wie es in microsoft.public.win32.programmer.directx.managed empfohlen wurde. Für eine 160kb Applikation wäre das imo etwas Overkill gewesen. Es soll schließlich alles schön klein und simpel bleiben...

Mal sehen was meine Tester dazu meinen!

21.01.2005 - 06:52 Uhr

Arf, da ich lediglich ein kleines Tool schreibe kann ich das vergessen - den Aufwand betreibt keiner, nur um das nutzen zu können. Was für einen Sinn macht denn unter diesen Umständen noch der Einsatz von Managed DirectX??? Ist ja völliger Schwachsinn!
🙁

Edit: gibt es keine Möglichkeit die dll mit der Applikation zu verteilen und diese über entsprechende Einbindung im Programmcode anzusprechen, ohne daß sie extra im Zielsystem registriert werden muß?

20.01.2005 - 16:12 Uhr

Erstmal: beim Spiel handelt es sich um 'Operation Flashpoint: Resistance', und eine erste Version meines Tools ist auf meiner OFP Webseite verfügbar. Nur damit hier nicht irgendwelche falschen Ideen aufkommen.

Das Tool soll es Spielern lediglich ermöglichen ihre Lieblingsserver zu 'überwachen', ohne dazu ständig mit Alt-Tab zwischen Spiel und Desktop hin-und-her zu wechseln und ohne ständig das (leicht ein paar hundert MB Ram verschlingende) Spiel ständig aktiv zu haben.

In der bestehenden Version habe ich bereits eine Buddylist, und die Möglichkeit eines Alarms bei Ende eines Spiels (so daß man der nächsten Runde rechzeitig vor Start beitreten kann) eingebaut, und - abgesehen von einem im DirectX-Teil dieses Forums geschilderten Problem - funktioniert dies auch einwandfrei für herkömmlich dezidierte OFP Server welche das übliche GameSpy-Verfahren (UDP-Request '\status&#39; auf Serverport +1) unterstützen.

Es gibt allerdings inzwischen eine neuere Version des Spiels namens VBS, welche die traditionellen GameSpy-Abfragen nicht mehr unterstützt - und genau die will ich eben auch abfragen. Primär aus Eigeninteresse, da ich beides spiele und es dafür noch kein vergleichbares Tool gibt.

Um den Server allerdings zu einer Antwort zu überreden muß ich ihn erstmal dazu bringen mein Paket nicht zu ignorieren - und das geht eben offensichtlich unter anderem nur wenn die Anfrage vom richtigen Port aus kommt. Daher meine Frage hier.

20.01.2005 - 15:16 Uhr

Erstmal warum ich anfrage: Ich schreibe derzeit ein Tool, mit dem ich Gameserver überwachen kann (d.h. Spielerzahl, gerade gespielte Map, etc. abfragen). Da die betreffenden Server auf die üblichen GameSpy-kompatiblen Anfragen nicht antworten, aber der in das Spiel integrierte Gambrowser die entsprechenden Infos abfragen kann, habe ich mich dran gemacht dessen Abfrage-Mechanismus nachzubilden. Dabei habe ich festgestellt daß die Anfragen immer vom lokalen Port 2304 abgehen, egal welchen Port der Server benutzt. Meine Vermutung ist nun, daß der Server nur eingehende Verbindungen vom entsprechenden Port akzeptiert.

Es sollte also prinzipiell möglich sein den Port festzulegen - wie, das kann ich leider auch deinem Beispiel nicht entnehmen.

20.01.2005 - 14:48 Uhr

Nein, obwohl ich VS so eingestellt hatte, daß die Referenzen (d.h. die entsprechende dll & xml) automatisch in das Verzeichnis des Binaries kopiert werden. Habe alles (exe, dll, xml und das mp3) gepackt und meinen Testern geschickt, aber die Antwort war wieder die selbe: Funzt nicht!
🙁

Bin so langsam mit meinem Latein am Ende, insbesondere da kein Tutorial irgendwo etwas zu dieser Problematic anmerkt. Kann doch nicht sein daß ich (wir?) die einzigen sind, die dieses Problem haben?!

19.01.2005 - 13:32 Uhr

Ahm, ich hätte vieleicht dazuschreiben sollen, daß ich nicht udpClient verwende, sondern direkt auf Sockets aufsetze (da ich den Timeout benötige der unverständlicherweise in der udpClient-Klasse nicht gesetzt werden kann):


int pingStart = 0;
string output = "";
try
{
	Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
	sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 2000);
	Byte[] sendBytes = new byte[32];
	sendBytes[0] = 0x20;
	// ...
	// Hier werden dann noch die anderen Bytes einzeln gesetzt
	// ...
	sendBytes[31] = 0x11;
	IPHostEntry serverHE = Dns.GetHostByName(this.Address);
	IPEndPoint RemoteIpEndPoint = new IPEndPoint(serverHE.AddressList[0], this.Port);
	EndPoint test = sock.;
	sock.SendTo(sendBytes, RemoteIpEndPoint);
	pingStart = System.Environment.TickCount; // Start timing
	Byte[] receiveBytes = new byte[434];
	EndPoint end = (EndPoint)RemoteIpEndPoint;
	try
	{
		int received = sock.ReceiveFrom(receiveBytes, ref end);
		char[] outchars = Encoding.UTF8.GetChars(receiveBytes, 0, received);
	}
	catch { }
	finally { sock.Close(); }
}
catch { }
finally
{	
	if (output != "") {this.PingReply = (System.Environment.TickCount - pingStart) + "ms";}
	else {this.PingReply = "";}
}
return output;

19.01.2005 - 12:47 Uhr

Danke für den Tip. Hab' die beiden DLLs jetzt mal meinem Archiv hinzugefügt - sind ja schließlich nicht besonders groß.

19.01.2005 - 12:22 Uhr

Wie kann ich den abgehenden Port beim Versenden von UDP Nachrichten festlegen?

19.01.2005 - 12:16 Uhr

Uhm, das mag jetzt eine dumme Frage sein, aber warum sollte da extra eine dll im Anwendungsverzeichnis liegen? Habe ich lokal ja auch nicht... Wenn auf dem Zielrechner DirectX 9.0c installiert ist, dann sollten alle nötigen DLLs doch eigentlich im System vorhanden und erreichbar sein, oder?

18.01.2005 - 15:39 Uhr

Hallo,

Ich habe zurzeit Probleme mit einem C#-Programm, und vermute daß diese in der Nutzung der DirectX AudioVideoPlayback-Funktion (Abspielen eines kurzen mp3 als Alarmton) begründet liegen.

Die Situation stellt sich so dar, daß ich das Programm problemlos bei mir laufen lassen kann und der Sound erstmal einwandfrei abgespielt wird - auch auf meinem Notebook gibt's keine Probleme. Auf anderen Rechnern läuft es dagegen nicht (bzw. das Form welches den Sound initialisiert und die DirectX-Klasse nutzt startet nicht). Sobald ich die 'using Microsoft.DirectX...'-Zeile und die entsprechenden Audio-Teile aus dem Code entferne funktioniert es wieder überall...

Anzumerken wäre daß meine Tester alle DX9c verwenden (ich auch), aber auf meinen beiden Rechnern zusätzlich das Dezember 2004 DX9 SDK & Visual C#.Net 2003 installiert ist. Nun erwarte ich doch aber wohl nicht zu unrecht, daß der DirectX-Code eigentlich auch mit der normalen DirectX-Installation funktionieren müßte, oder?

Gibt's da irgendwelche Wege das Problem zu umgehen?

12.01.2005 - 20:06 Uhr

Ich habe das auch mal versucht, und mein Programm startet auch - nur scheinen die Parameter nicht übergeben zu werden...

System.Diagnostics.ProcessStartInfo sdsi = new System.Diagnostics.ProcessStartInfo(appcall, appargs);
System.Diagnostics.Process.Start(sdsi);

appcall & appargs sind strings, wobei appargs mehrere Parameter (durch Leerzeichen getrennt) enthält. Was ist falsch, oder wie kann ich anderweitig sicherstellen, daß die Parameter richtig übergeben werden?

11.01.2005 - 12:32 Uhr

Ich möchte in meiner Anwendung das Icon während des Programmablaufs anpassen können, ohne dabei die .ico-Dateien als seperate Dateien auf dem Zielrechner installieren zu müssen. D.h. sie sollen mit in den compilierten Code eingebettet werden. Wie muß ich vorgehen um eine solche Resource einzubetten - und wie greife ich dann von innerhalb des Programmes darauf zu???

Ich habe sie in Visual Studio dem Projekt bereits hinzugefügt und könnte nun einen Namespace und Namen definieren - leider scheine ich über diese Angaben trotzdem nicht darauf zugreifen zu können...
🙁

19.12.2004 - 02:26 Uhr

Danke, insbesondere der Webcast war sehr informativ! Mehr als den rechten Wink habe ich nicht gebraucht! 🙂

18.12.2004 - 11:51 Uhr

Hmmmhhh, könnte mir vieleicht jemand eine kurze und prägnante Erklärung dazu liefern, wie ich am besten die Parameter eines Objektes in einem ListView abbilde?

Zum Hintergrund: Ich habe ein Objekt mit diversen String, Int, Double & auch DateTime Parametern, die ich in verschiedenen Spalten des ListView (Detailansicht) darstellen möchte. Wichtig ist dabei auch daß einige der Objekteigenschaften sich laufend ändern und ich diese Änderungen natürlich umgehend in der Listview wiederfinden möchte.

Die Spalten (Columns) selbst habe ich im VS schon angelegt, was mich allerdings irritiert sind die ganzen zusätzlichen Dinge wie Items, Groups, etc. Was hat es damit genau auf sich (Items sind 'ListView-verträgliche' Repräsentationen meiner Objekte und deren relevanten Daten, oder)? Kann ich wie bei der Listbox ein direktes Databinding auf mein Objekt erstellen und dann die Listview sich automatisch updaten lassen, oder muß/sollte ich eine Export-Methode (meine Klasse -> ListViewItem) implementieren und die ListView über einen Invoke regelmäßig manuell updaten?

Ist nur ein Verständnisproblem meinerseits, aber vieleicht kann mich ja hier jemand auf eine kurze und prägnante (= verständliche) FAQ oder ein entsprechendes Onlinetutorial verweisen.

16.12.2004 - 21:15 Uhr

Schau mal hier: http://www.mycsharp.de/wbb2/thread.php?threadid=3822

So funktionierts inzwischen bei mir. Ist zwar in meinem Fall nur ein simpler Query, aber das brauchst Du im Grunde ja auch.

16.12.2004 - 13:33 Uhr

Danke, inzwschen hab ich's geschafft - der eigentliche Update-Thread ist innerhalb der DataTable-Klasse angelegt (die ich auch gleich nochmal sauber reimplementiert habe - war doch ein arges Gewurschtel vorher), den eigentlichen Refresh der DataGridView übernimmt aber ein weiterer Thread, welcher im Form angelegt ist. Da der Refresh-Thread keine Parameter übergibt konnte ich mir dabei den eigenen Delegate sparen und anstelle dessen MethodInvoker verwenden.

Die Foren hier sind wirklich Gold wert! 8) 👍
(nicht, daß ich welches hätte! 😄)

15.12.2004 - 19:58 Uhr

Habe mich jetzt etwas in die Materie eingelesen und muß leider feststellen, daß Invoke nur direkt mit Controls funktioniert - mein DataTable ist zwar an eine DataGridView gebunden, aber wie kann ich diese im Invoke-Aufruf (der aus einer seperaten Klasse heraus erfolgt in der das DataGridView nicht bekannt ist, sondern nur der entsprechende DataTable) ansprechen? Um ein Beispiel wäre ich sehr dankbar!