Laden...

Forenbeiträge von boon Ingesamt 9 Beiträge

30.01.2012 - 21:11 Uhr

Hallo Zusammen,

ich bin gerade fleißig dabei meine Comboboxen zu füllen. Ich möchte gerne, dass das Dropdown Menü der Combobox mindestens so groß ist wie der Inhalt, jedoch nicht größer als das Form1 Fenster.

Ich habe den unten angehängten Code eingebunden.
#Die Funktion habe ich mit dem DropDown Ereignis der Combobox verknüpft,
wird also automatisch aufgerufen, sobald ich den DropDown Pfeil anklicke. 🙂
Die Höhe berechne ich dort mit height=Math.Max(... usw
Funktioniert soweit auch wunderbar.
Jedoch, sobald ich diese Berechnung aktiviere, wird beim ersten Klick auf den DropDown Pfeil nur der Inhalt der Combobox markiert. Beim zweiten Klick wird dann dann die DropDown Liste angezeigt. X(
Wenn ich die Höhenberechnung auskommentiere wird die Liste gleich beim ersten Klick angezeigt, so wie es ja auch sein soll.
(Wenn ich das Programm Debugge wird der Code beim ersten und zweiten klick identisch durchlaufen) 🤔

Sicher hat jemand von euch eine Idee woran das liegt, bzw wie ich es beheben kann. 👍


private void comboBox_ALL_DropDown(object sender, EventArgs e)
        {
            ComboBox senderComboBox = (ComboBox)sender;
            int width = senderComboBox.DropDownWidth;
            int height = senderComboBox.DropDownHeight;
            Graphics g = senderComboBox.CreateGraphics();
            Font font = senderComboBox.Font;

            // Höhe einstellen
            height = Math.Max(1, senderComboBox.Items.Count) * senderComboBox.ItemHeight;
            if (height > tabPage1.Height - senderComboBox.Top)
                height = tabPage1.Height - senderComboBox.Top;
            senderComboBox.DropDownHeight = height;
            //senderComboBox.IntegralHeight = true; //hiermit soll sichergestellt werden, dass keine "angefangenen" einträge angezeigt werden. 

            int vertScrollBarWidth =
                (senderComboBox.Items.Count > senderComboBox.MaxDropDownItems)
                ? SystemInformation.VerticalScrollBarWidth : 0;

            int newWidth;
            foreach (string s in ((ComboBox)sender).Items)
            {
                newWidth = (int)g.MeasureString(s, font).Width
                    + vertScrollBarWidth;
                if (width < newWidth)
                {
                    width = newWidth;
                }
            }
            if (width > tabPage1.Width- senderComboBox.Left)
                width = tabPage1.Width - senderComboBox.Left;

            senderComboBox.DropDownWidth = width;

        }        

Liebe Grüße

24.10.2011 - 21:02 Uhr

Das habe ich schon befürchtet.
Schade, aber danke für deine Hilfe.

Bin gerade schon am versuchen per System.Diagnostics.Process
nbtstat -a 192.168.1.60 aufzurufen.
Nur stehe ich gerade auf dem Schlauch den Rückgabewert mit einem String zu vergleichen.

Rückgabewert enthält korrekt den Computernamen "ServerA" leider einige male 😉

Hat mir jemand eventuell ein script-schnipsel, der nbstat aufruft und den Rückgabewert auf "ServerA" prüft?

Wär echt klasse... Grüße

C:\Documents and Settings\boon\Desktop>nbtstat -a 192.168.1.60

LAN-Verbindung 4:
Knoten-IP-Adresse: [192.168.10.25] Bereichskennung: []

Host nicht gefunden.  

Network Connect Adapter:
Knoten-IP-Adresse: [192.168.1.19] Bereichskennung: []

  NetBIOS-Namentabelle des Remotecomputers  

   Name               Typ          Status  
---------------------------------------------  
ServerA     &lt;00&gt;  EINDEUTIG   Registriert  
DOMAIN           &lt;00&gt;  GRUPPE      Registriert  
ServerA     &lt;20&gt;  EINDEUTIG   Registriert  
ServerA     &lt;01&gt;  EINDEUTIG   Registriert  
ServerA     &lt;03&gt;  EINDEUTIG   Registriert  

MAC Adresse = 00-00-00-00-00-00  

24.10.2011 - 20:37 Uhr
IPHostEntry hostEintrag = Dns.GetHostEntry(192.168.1.60);
            label1.Text = Convert.ToString(hostEintrag.HostName);

liefert "Produktivsystem"

oder was meinst du?

Grüße

24.10.2011 - 20:13 Uhr

auf dem Client

Bin auch schon am überlegen nbstat zu nutzen, und dann im Rückgabewert nach den beiden ServerA bzw. B zu suchen. Und je nachdem was ich finde kann ich weitermachen.
Wär nur schön, wenn das ohne solche Konstrukte mit externen Programmen funktioniert.

24.10.2011 - 19:42 Uhr

Möglich müsste es sein, da
ntbstat -a 192.168.1.60
ServerA zurückliefert.
Sollte doch aber auch komfortabler per C# zu lösen sein als ein shellcommand aufrufen zu müssen... oder? 8)

24.10.2011 - 19:29 Uhr

Hallo, wenn ich mir den DNS Namen per "Dns.GetHostEntry(192.168.1.60)" auslese, bekomme ich "Produktivzugang"

Angenommen.
Server1 ist aktuell Produktiv.
Dh. Server1 ist über ServerA(192.168.1.50) und Produktivsystem(192.168.1.60) erreichbar.
Server2 ist nur über ServerB(192.168.1.51) erreichbar, da sein Produktivzugang deaktiviert ist.

Mein Progamm kann aber nicht wissen, welcher der beiden Server aktuell das Produktivsystem ist.
Was ich 100%ig weiss, ist das 192.168.1.60 produktiv ist.
Nur bekomme ich halt hier auch nur "Produktivsystem" zurückgemeldet.

Ich benötige also einen weg über die 192.168.1.60 an ServerA zu kommen... 😁

24.10.2011 - 19:16 Uhr

Hallo zusammen,

ich stehe gerade vor einem kleinen Problem und komme mit "Dns.GetHostEntry()" usw. nicht zum gewünschten Erfolg.
Vielleicht habt ihr ja den Geistesblitz der mir hier fehlt.

Hintergrundinformationen:

2 Server
Server1 hat den Computernamen ServerA.
Server2 hat den Computernamen ServerB.
Beide Server haben jeweils 2 Netzwerkkarten.
Eine der Netzwerkkarten ist für den Wartungszugang und die zweite für den Produktivzugang.
Die Netzwerkkarte für den Produktivzugang ist immer nur auf einem Server aktiv.

DNS Auflösung:
ServerA: 192.168.1.50
ServerB: 192.168.1.51
Produktivzugang: 192.168.1.60

Mein Programm soll nun den Computernamen ermitteln vom Produktivserver.
"Dns.GetHostEntry(192.168.1.60)" liefert mir jedoch nur "Produktivzugang" zurück.
Egal was ich bis jetzt probiert habe bekomme ich immer nur "Produktivzugang" zurück.
Ich benötige jedoch "ServerA" oder "ServerB".

Sorry, falls ich mich nicht verständlich genug ausgedrückt habe. Im Notfall einfach nochmal nachfragen.

Vielen Dank.

20.10.2011 - 07:59 Uhr

Guten Morgen,

@michlG: Vielen Dank für den Hinweis, das werde ich mir mal genauer anschauen. Klingt vielversprechend.

@BerndFfm: Danke.

Noch einige weitere Informationen:
Anzahl der Server die angefragt werden müssen: ca 50
Zur Zeit läuft noch ein altes Programm, dass diese Aufgabe übernimmt. Es fragt jedoch seriell alle Server an. Pro Server dauert die Anfrage etwa 10 Sekunden, was sich dementsprechen zu 500 Sekunden aufaddiert.
Natürlich vorausgesetzt, die Server sind alle komplett erreichbar. Ansonsten addieren sich natürlich auch noch Timeouts hinzu.

Grueße

19.10.2011 - 20:24 Uhr

verwendetes Datenbanksystem: SQL Server 2005 ( 2008 )
Betriebssystem: Windows Server 2003 ( 2008 )
Entwicklungsumgebung: Visual Studio 2010 Premium
.net Version: .net 3.5 -> Version 4 ist aktuell noch nicht ausgerollt in unserer Firma.

Hallo zusammen,

ich bin noch grün hinter den Ohren was programmieren angeht.
Die grundlegenden Dinge bekomme ich schon hin, und mit einigen Beispielen im Internet und Büchern habe ich noch immer alles hinbekommen was ich wollte.

Jetzt hänge ich aber schon einige Zeit an einem Problem, welches meiner Meinung nach nicht all zu schwer zu lösen sein sollte. Ich finde jedoch nicht die Antworten auf meine Fragen -> vielleicht suche ich auch einfach falsch. 😉

Situation:
Ich habe einen Monitoring Rechner. Dieser soll mit Hilfe eines selbstgeschriebenen Programms den Status von n Servern anzeigen.
Dafür soll das Programm parallel an alle Server einen SQL Befehl absetzen und das Ergebnis in eine Combobox schreiben (Jeder Server hat eine eigene Combobox).

Vielleicht kann mir jemand von euch ein paar Tips und Quellcodebeispiele hierfür geben.

Beispiel:
Server1 -> DB: Beispieldatenbank -> select name from TBL_Bsp
Server2 -> DB: Beispieldatenbank -> select name from TBL_Bsp
Server3 -> DB: Beispieldatenbank -> select name from TBL_Bsp

Combobox1 = Ergebnis von Abfrage Server1
Combobox2 = Ergebnis von Abfrage Server2
Combobox3 = Ergebnis von Abfrage Server3

So, viel geschrieben und wenig gesagt 😁
Ich hoffe ich konnte etwas verständlich rüberbringen was ich meine.

Bin auf eure Ansätze gespannt.