Laden...

Forenbeiträge von trib Ingesamt 708 Beiträge

20.07.2009 - 09:02 Uhr

Mich würde ja interessieren ob das wirklich einen Effekt hat.
Denn so weit ich weiß liegt an dem USB-Anschluss immer Strom an, ob der Softwaremäßig deaktiviert ist oder nicht...

Z.B. kann ich mein Handy (oder Navi) per USB Laden ohne das der PC davon Notiz nimmt. Erst wenn ich eins der Geräte anschalte merkt Windows das der Port genutzt wird...

Gruß
TriB

20.07.2009 - 08:47 Uhr

Für dieses Anwendungsszenario halte ich aber selbst SQL Compact für zu viel des Guten.
Da nur einige wenige Daten abgelegt werden, die wahrscheinlich in eine Tabelle passen und auch nicht so häufig geschrieben und gelesen werden empfehle ich eine XML Datei.
Der Aufwand ist recht gering und dem Nutzen angepasst.

Ein Datenbank empfehle ich wenn es mehrere Daten werden, die auch in mehreren Tabellen hinterlegt werden und du öfter einen Zugriff benötigst.
In deinem Fall denke ich ja mal, das du diese Liste nur erstellst, wenn dein Programm beendet wird. Ansonsten hast du die Werte ja bestimmt in einem Array/List.

Gruß,
TriB

20.07.2009 - 08:35 Uhr

Stichwort:

handled = e.Handled;

Damit solltest du an dein Ergebnis kommen auch ohne am Tastatur-Layout herum zu fummeln.

Gruß,
TriB

13.07.2009 - 17:36 Uhr

Was Ploetzi in seinem 2. Link hat, ist doch Silverlight, wenn ich nicht irre oder?

Das läuft ja in HTML ähnlich zu JavaScript. Beispiele gäbe es dann hier:
http://www.silverlight-tutorials.de/

10.07.2009 - 13:11 Uhr

Hi ErfinderDesRades & blutiger_anfänger,

das habe ich mir auch schon gedacht. Ist aber sehr unschön.
Wenn man dann einmal nicht mitbekommt, das das Control den Fokus verliert schießt man sich komplett ab 😦

Mittlerweile denke ich das es echt keine elegante Möglichkeit gibt.

Evtl. könnte man mit WMI oder so auf den Internet Explorer zugreifen oder irgendwie mit IHTML eine Funktion in die Seite einbauen.
Per JavaScript-Injection wäre das kein Problem, nur weiß ich dann nicht wie ich das als Event in C# mitbekomme.

Gruß
TriB

10.07.2009 - 09:26 Uhr

Das ist ja leider das selbe was ich auch schon mache.
In dem WebBrowser habe ich bereits das PreviewKeyDown Event aboniert und gebe einfach eine Message aus. Mehr Events diesbezüglich gibt es bei dem Control ja leider nicht.
Ob e nun Handled ist oder nicht, macht auch keinen Unterschied. So langsam habe ich nun alle Events die mit Keys zu tun haben durch. Es scheint echt nur der WebBrowser resistent zu sein.
Wird wahrscheinlich an der IE-Engine liegen...

09.07.2009 - 17:09 Uhr

Hallo zusammen,

leider plagt mich die gleiche Frage.
In meiner Form habe ein WebBrowser Control, welches sich über die gesamte Größe erstreckt.
Diesem habe ich das Event "webBrowser_PreviewKeyDown" zugewiesen. Ein Property habe ich nicht gefunden.
Die Form hat das Event "WebForm_PreviewKeyDown", welches in den Properties per KeyPreview enabled ist.

Zusätzlich habe ich noch (zur Sicherheit) "WebForm_KeyDown" registriert.

Keines dieser Events wirft ein Ergebnis!
Füge ich z.B. ein Label der Form hinzu und lege es über das WebBrowser Control, kann ich jede Taste abfangen, solange es den Fokus besitzt.

Warum weigert sich der WebBrowser so wehement? 🤔
Eine JS Injection in das IhtmlDocument eignet sich leider nicht, da ich in C# die Taste brauche um zu reagieren.

Bin für jeden Ansatz dankbar 🙂
Gruß,
TriB

09.07.2009 - 10:59 Uhr

So ein Programm würde mich auch interessieren.
Da ja bald der eeePC T91 mit Touchscreen kommt wäre es doch prima wenn die Tastatur eingeblendet wird, sobald man auf ein Texteingabefeld stößt.

Aber vielleicht hat Acer da in seiner Tablet-Software schon etwas gezaubert 😃

Gruß,
TriB

07.07.2009 - 11:14 Uhr

Meiner Meinung nach ist das doch sowieso die falsche Herangehensweise.

Du möchtest das dein Programm genutzt wird, wenn Jmd. auf eine Bilddatei klickt.
Dann mach das doch auch und versuch nicht an der Maus herum zu doktoren 😉

Die Registry hält alle Programmverknüpfungen für jeden Datentyp vor. Dort ist es mehr als einfach dein Programm zu hinterlegen anstelle von z.B. der Bild&Faxanzeige.

Je nach Anforderung kannst du bei jedem Start deines Programmes die Registry zwischenspeichern und auf dein Programm abändern. Wenn du die Verknüpften Icons so lässt wie sie sind, bekommt das der Nutzer nichtmal mit.
Wird dein Proggie geschlossen, wird der Ursprungszustand zurück geschrieben.

Dateityp Benutzerbezogen registrieren

Gruß,
TriB

23.06.2009 - 10:58 Uhr

Hi Kr@uti ,

so einfach ist es leider nicht, wenn du eine Config-Datei verwendest.
Jeder Schreibschutz kann einfach umgangen werden.
Die Datei schreib zu schützen, verstecken und/oder dauerhaft im Zugriff des Programmes lassen sind keine Wirklichen Lösungen.

Der "Richtige" Weg wäre imho eine Verschlüsselung der Configdatei.

Du könntest z.B. auch einen Hashwert einfügen der zu A oder B passt. Änderst du die Datei auf "B" um stimmt der Hash-Wert nicht mehr und das Programm meckert.

Gruß,
TriB

04.06.2009 - 11:17 Uhr

Habe Bing jetzt als meine Startseite festgelegt.

Gruß Timo

Dann gehörst du nun zu den 6% der Suchmaschinen-Benutzer Weltweit.
Möglicherweise ist der Wert schon so "hoch", da viele die Suchmaschine ausprobieren wollten und durch den Bug im IE 6 (Der nimmt Bing unveränderlich als Standardsuchmaschine).

Bin mal gespannt wie es sich weiterentwickelt. Mit WolframAlpha wurde eine neue Richtung in Sachen Informations-Maschine eingeschlagen. Das wird nun von Google und MS kopiert und in die "normalen" Ergebnisse integriert.

Bald haben wir einen Suchbegriff und bekommen zahlreiche relevante Informationen, Links, Bilder, Videos, Historien und wohl auch unumgänglich Werbung grafisch schön aufbereitet.

Momentan nutze ich meist noch Google (Obwohl ich das Gefühl habe immer weniger zu finden) und dazu ein nettes FireFox Addon, was die Wolfram Alpha Ergebnisse, sofern vorhanden, rechts über die Werbung einblendet.

So stelle ich mir auch die weitere Zukuft vor, das alle Stärken der einzelnen Anbieter in einer Übersicht zusammengefasst werden. Entweder über einen Online-Anbieter oder per Addon im Browser.

Gruß,
TriB

28.05.2009 - 11:32 Uhr

Wenn das ganze Multiuser fähig sein soll, kann man doch auf eine Website gehen.
Dazu gibt es ein Starterkit in ASP.Net von msdn.

Zu finden unter: Time Tracker Starter Kit

Das bietet die Grundfunktionen um die Arbeitszeiten an Projekten zu sammeln. Alles weitere muss man natürlich selbst programmieren...

27.05.2009 - 11:06 Uhr

Neuer Sport: Suchanfragen ergooglen, auf die Wolfram eine Antwort liefern kann.

You make my Day 🙂

Prinzipiell finde ich WA echt cool. Das Design gefällt mir und die Ergebnisse (sofern welche kommen) sind klasse gegliedert.
Die Kernfunktion Fragen zu bearbeiten ist leider noch nicht so ausgereift, wie ich es anfangs erwartet habe.
Bzw. es fehlen einfach noch viele Zusammenhänge.

Bis WA so funktioniert, das man mehr Antworten als "Ich habe Sie leider nicht verstanden"-Meldungen bekommt wird es wohl noch lange, lange dauern. Von einer Deutschen Version mal abgesehen.

20.05.2009 - 16:53 Uhr

Für sowas hatte ich mal eine Klasse gefunden die das für mich erledigt.

Klasse Resolution.cs :

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE1
{
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string dmDeviceName;
    public short dmSpecVersion;
    public short dmDriverVersion;
    public short dmSize;
    public short dmDriverExtra;
    public int dmFields;

    public short dmOrientation;
    public short dmPaperSize;
    public short dmPaperLength;
    public short dmPaperWidth;

    public short dmScale;
    public short dmCopies;
    public short dmDefaultSource;
    public short dmPrintQuality;
    public short dmColor;
    public short dmDuplex;
    public short dmYResolution;
    public short dmTTOption;
    public short dmCollate;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string dmFormName;
    public short dmLogPixels;
    public short dmBitsPerPel;
    public int dmPelsWidth;
    public int dmPelsHeight;

    public int dmDisplayFlags;
    public int dmDisplayFrequency;

    public int dmICMMethod;
    public int dmICMIntent;
    public int dmMediaType;
    public int dmDitherType;
    public int dmReserved1;
    public int dmReserved2;

    public int dmPanningWidth;
    public int dmPanningHeight;
};



class User_32
{
    [DllImport("user32.dll")]
    public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode);
    [DllImport("user32.dll")]
    public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags);

    public const int ENUM_CURRENT_SETTINGS = -1;
    public const int CDS_UPDATEREGISTRY = 0x01;
    public const int CDS_TEST = 0x02;
    public const int DISP_CHANGE_SUCCESSFUL = 0;
    public const int DISP_CHANGE_RESTART = 1;
    public const int DISP_CHANGE_FAILED = -1;
}


namespace Resolution
{
    public static class ScreenResolution
    {

        /// <summary>
        /// Ändert die Bildschirmauflösung in die gewünschte Größe
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        public static void ChangeResolution(int width, int height)
        {
            Screen screen = Screen.PrimaryScreen;


            int iWidth = width;
            int iHeight = height;


            DEVMODE1 dm = new DEVMODE1();
            dm.dmDeviceName = new String(new char[32]);
            dm.dmFormName = new String(new char[32]);
            dm.dmSize = (short)Marshal.SizeOf(dm);

            if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm))
            {

                dm.dmPelsWidth = iWidth;
                dm.dmPelsHeight = iHeight;

                int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST);

                if (iRet == User_32.DISP_CHANGE_FAILED)
                {
                    MessageBox.Show("Unable to process your request");
                    MessageBox.Show("Description: Unable To Process Your Request. Sorry For This Inconvenience.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY);

                    switch (iRet)
                    {
                        case User_32.DISP_CHANGE_SUCCESSFUL:
                            {
                                break;

                                //successfull change
                            }
                        case User_32.DISP_CHANGE_RESTART:
                            {

                                MessageBox.Show("Description: You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                break;
                                //windows 9x series you have to restart
                            }
                        default:
                            {

                                MessageBox.Show("Description: Failed To Change The Resolution.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                break;
                                //failed to change
                            }
                    }
                }

            }
        }
    }
}

Der unglaublich schwierige Aufruf:

Resolution.ScreenResolution.ChangeResolution(1280, 1024);

Gruß,
TriB

15.05.2009 - 14:10 Uhr

Hmmpf, logisch. Ich hatte das jetzt ganz verkehrt verstanden.
Mit Parametern meintest du natürlich

static void Main(string[] args)

Nun geht es wohl. Konnte den PC noch nicht neustarten, aber eine Verknüpfung hilft Wunder 😃

15.05.2009 - 11:50 Uhr

du könntest den autostart mit einem parameter versehen.

Und wie/wann setzte ich diesen Parameter? Das kann sinnvoller Weise ja nur beim Beenden des Programmes geschehen.
Also prüfe ich ob das Programm vom Benutzer oder von Windows beendet wurde (Das geht so weit ich weiß über den Sender beim Closing),
dann hätte ich aber das selbe Problem, wenn das Programm per Hand beendet aber nicht wieder gestartet wird...

IMHO gibt es nur eine eindeutige Lösung wenn ich weiß "wer" mein Programm gestartet hat.

15.05.2009 - 11:17 Uhr

Guten Morgen zusammen,

Wenn ich in meinem Programm einen Haken "Autostart" setzte, soll es natürlich nach dem nächsten Systemstart im Tray bleiben und nicht angezeigt werden.

Frage ich ab ob der Registryeintrag existiert, dann kann es sein das ich das Programm trotzdem per Hand gestartet habe und es wird nicht angezeigt.

Wie bekomme ich also nun mit, das mein Programm per Autostart und nicht vom Benutzer gestartet wurde?

if (cbAutostart.Checked && System.Environment.UserName == "System")
                this.WindowState = FormWindowState.Minimized;

Bring rein garnichts, da wie ich gelernt habe nur Dienste von System gestartet werden können...

Gruß,
TriB

14.05.2009 - 16:00 Uhr

Du möchtest also nicht im eigentlichen Sinne gruppieren, sondern aus mehreren Zeilen die "Not null" Values in einer Zeile schreiben.

IMHO würde ich das mit SubSelects lösen. Für das letzte Ergebnis was du hier Präsentiert hast sähe das etwa so aus:

Select
(Select TOP 1 Key1
FROM YourTable
Where NOT (Key1 = Null) ) AS Key1,
(Select TOP 1 Key2
FROM YourTable
Where NOT (Key2 = Null) ) AS Key2,
USW.

Ist jetzt aus dem Kopf heraus.

In "YourTable" steht dein mit Case Zusammengebasteltes Ergebnis.

14.05.2009 - 15:49 Uhr

Probier mal

Control ctl = sender as Control;

Dann kannst du ctl.Text oder ctl.Name problemlos abfragen.

13.05.2009 - 09:29 Uhr

Hi zusammen,

ich sehen das ähnlich wie Stipo. Wenn z.B. Burning Board sowas einführen würde, hätte sich das wahrscheinlich schnell etabliert.

Persönlich lehne ich sowas allerdings ab. Das birgt für mich die selbe "Gefahr" wie eine Rache-Karte (Payback 😁 ) oder andere zentrale Stellen, die Daten sammelt.
Der Gläserne Bürger 2.0

Was passiert wenn diese ID herausgefunden oder gar geknackt wird? Statt ein einziges Mail-Konto zu "verlieren" ist das gesamte Social-Network gefährdet.
Bei z.B. eBay würde der Spaß dann spätestens aufhören. Denn dort geht es um Geld...

Gruß,
TriB

07.05.2009 - 10:41 Uhr

Hi zusammen,

also der Vergleich ist ja wohl der Oberhammer! Allein der Kommentar am Ende sagt ja schon alles:

Fazit: Ich habe keine Suchbegriffe genommen, die ganz offensichtlich keine berechenbare Antwort haben und Wolfram Alpha überfordert hätten. Andererseits wollte ich den Schöpfern der Antwortmaschine auch nicht den Gefallen tun und Anfragen aus Physik, Chemie, Ingenieurwesen oder Genomik nehmen

Schön nach dem Motto: "Ich habe in Wolfram extra nicht das eingegeben was es erwartet. Das wäre ja zu einfach. Bei Google aber schon..."
Viel Subjektiver geht es natürlich kaum.

Da es sich um eine "Antwortmaschiene" handelt hätte ich mal erwartet das es zumindest eine Frage in den Vergleich schafft -> Fehlanzeige.

Ganz abgesehen davon finde ich die Diskussion "Google-Killer" genauso sinnlos wie die des "Iphone-Killers". Natürlich haben z.B. HTC Geräte mit Windows Mobile viel mehr Funktionen und Features zu bieten. Sehen aber nicht so schick aus und bieten eine nüchterne Bedienung!

Wolfram bietet Antworten auf Fragen mit wissenschaftlichen Zusammenhängen und aufbereitetem Fachwissen. Google sucht nach Tags im Internet und sortiert diese nach bestimmten Rankings.
Für mich sind das Äpfel und Birnen...

06.05.2009 - 16:55 Uhr

Du meinst also das "Property" was Outlook und der Exchange Server nutzen um nur die Dinge abzugleichen, die geändert wurden.
Geben tut es das auf jeden Fall. Aber wo und ob man so einfach dran kommt, weiß ich nicht.

24.04.2009 - 09:54 Uhr

Hallo pidi,

dann poste uns doch mal was du schönes gefunden hast. (Snippet, Link...)
So haben wir dann auch etwas davon und können später über die Suche auch eine Lösung finden 😃

Gruß
TriB

15.04.2009 - 11:40 Uhr

Besser als eine Schleife zu basteln wäre das Event "Navigated" zu abbonieren.
Dann wird eine Funktion aufgerufen wenn die Seite zu Ende geladen ist.

In diesem Fall muss die Navigation natürlich auch mit "Navigate()" eingeleitet werden.

Gruß,
TriB

09.04.2009 - 15:57 Uhr

Also teilweise habe ich nun eine Lösung gefunden.
Und zwar kann im Aufruf mit folgendem Code die Form "gezwungen" werden die Transparenten Styles zu verwenden. Jedoch nur wenn man sie nochmal explizit anspricht und leider gilt das auch für alle Unter-Elemente.

this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            grpBox1.BackColor = Color.Transparent;
            grpBox2.BackColor = Color.Transparent;
            ...

Abgesehen davon, das alle Buttons nun auch einen Transparenten Hintergrund haben, wird der Code immer ausgeführt.
Unter XP im Silver-Design zeigt es zwar keine Auswirkungen, aber schön ist es nicht.

Kann mir Jemand vielleicht einen Tipp geben, wir ich das aktuelle Design abfragen kann? Sollte natürlich XP aufwärts kompatibel sein...

Gruß,
TriB

09.04.2009 - 12:01 Uhr

Hi zusammen,

wenn ich auf einer Form ein Hintergrundbild habe, und alle Elemente die darüber liegen den Hintergrund transparent eingestellt haben, wird durch das Windows Classic Design alles zur Nichte gemacht.

Das Classic-Design setzt die Hintergrundfarbe auf Standard Grau, bzw. Weiß und meine Form sieht schrecklich aus.

            Application.EnableVisualStyles(); 

Bewirkt genau das Gegenteil, wenn mich nicht alles täuscht.

Entweder sollten die Controls ++immer ++transparent sein (unabhängig der Design Einstellung) oder ich muss den Style sicher abfragen und mir ein 2. Design überlegen.

Gibt es da eine Möglichkeit?

Danke,
TriB

09.04.2009 - 11:41 Uhr

Das klingt ja recht simpel.

Da du die Eingaben speichern (und wahrscheinlich nach einem Neustart auch wieder einlesen) möchtest, empfehle ich XML. Dazu gibt es hier im Forum viele Anleitungen.

So kannst du z.B. den Namen des Controls und den Wert sichern.
<Control="Textbox1" value="Das ist mein Text">

Damit kannst du garantieren, das die Werte auch wieder ihre Felder finden. Abgesehen davon hast du keine Probleme, wenn man ein neues Feld hinzu kommt.

Die weitere Funktionalität, wie du sie beschreibst gehört aber imho zu den Grundlagen.
Trotzdem habe ich dir mal ein ganz kurzes Snippet zum Verständnis gebastelt, weil ich das eh gerade in der Hand hatte.

using System.IO;
using System.Xml;

if (File.Exists(path)
 XmlTextReader reader = new XmlTextReader(path);
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        if (reader.AttributeCount >= 1)
                        {
                            if (reader.GetAttribute(0) == "Textbox1")
                                Textbox1.Text = reader.GetAttribute(1);
                            if (reader.GetAttribute(0) == "Textbox2")
                                Textbox2.Text = reader.GetAttribute(1);
                            if (reader.GetAttribute(0) == "CheckBox1")
                                CheckBox1 = reader.GetAttribute(1).Contains("True") ? true : false;
                        }                        
                        break;
                    default:
                        break;
                }
            }
            reader.Close();      

Gruß,
TriB

09.04.2009 - 11:09 Uhr

Guten Tag,

also ich würde das so verstehen, das du die Informationen speichern möchtest ohne das der User davon etwas mitbekommt. Unabhängig der Sichtbarkeit der Datei.

Dazu müsste man wissen was für Informationen du speichern möchtest.
Sind das z.B. 2 Pfade könnte man das einfach in den Settings der Datei ablegen.
Sind es X Pfade könnte man eine einfache Text Datei nehmen.
Sollte es sich aber um mehrere Pfade zu mehreren Dateien handeln, empfiehlt sich XML.

Speichern würde ich das in dem Ordner "Anwendungsdaten" des jeweiligen Benutzers.
Stichwort: SpecialDirectorys.

Gruß,
TriB

09.04.2009 - 09:07 Uhr

Morgen zusammen,

zuerst muss ich mich in die Gruppe der Firefox-User mit der automatischen Rechtschreibprüfung einreihen. Das ist echt ein tolles Ding, da es auf die Grammatik und Autokorrektur verzichtet und lediglich die einzelnen falschen Wörter unterstreicht.
(Ich mag keine Bevormundung...)

Da ich auch in dem einen oder anderen Forum aktiv bin, muss ich sagen das mir hier kaum ein Post negativ auffällt. Meiner Meinung nach mag das daran liegen, das nicht jeder Depp programmieren kann und zumindest von der Seite aus eine gewisse Grund-Intelligenz herrscht.
Faulheit, den Text nochmal durch zu lesen, Buchstabendreher oder Rechtschreibreform mal ausgenommen 😃
(Und JAck30lena´s Kleinschreibung um Strom & Ressourcen zu sparen nicht zu vergessen)

Schon mal Frohe Ostern
TriB

08.04.2009 - 15:57 Uhr

Danke für die Antworten.

Gelöst habe ich es nun mit der boolschen Variable. Wenn herbivore sagt das es üblich ist, dann glaube ich das einfach mal 🙂

Ist auch kürzer als hin und her zu (de)registrieren.
Abgesehen davon das Sinn & Zweck schneller erkennbar ist, denke ich.

Lohnt sich zwar fast nicht zu posten:

bool checkChangedInternal = true;

private void cbDebugging_CheckedChanged(object sender, EventArgs e)
        {
            if (!checkChangedInternal)
                if (MessageBox.Show("Möchten Sie wirklich...?", "Debugging", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    Do_Something();
                }
                else
                {
                    checkChangedInternal = true;
                    cbDebugging.Checked = !cbDebugging.Checked;
                }
            checkChangedInternal = false;
        }

TriB

08.04.2009 - 08:54 Uhr

Guten Morgen Wax, Tomot,

die Idee mit der Variablen kam mir auch sofort. Jedoch finde ich es mehr als unschön jedes mal eine boolsche Variable zu setzten wenn ich codeseitig auf die checkbox zugreife.

Die Sache mit dem Databinding klingt nicht schlecht. Damit hatte ich mich bis dato nur noch nicht auseinander gesetzt. Wird sich dann jetzt ändern 😃

Leider muss die Datei sofort geändert werden, wenn die cb betätigt wird. Da hängt noch ein Rattenschwanz mit Aktionen dahinter (Datei speichern, Server neustarten, gestartete Dienste prüfen...)

Dank euch für die Tipps, ich werde mir die Databindings mal anschauen und als Notlösung die bool Variable nutzen.

Ruhigen Arbeitstag,
TriB

07.04.2009 - 16:58 Uhr

Guten Tag zusammen,

ich habe ein recht simples Problem, wozu mir aber keine sinnvolle Lösung einfällt.

Eine CheckBox hat eine CheckedChanged-Event, um in einer XML-Datei ein Property zu ändern.

Nun wird beim Start des Programmes abgefragt ob diese Node gesetzt ist oder nicht.
Ist sie das, wird die CheckBox vorbelegt und ruft selbst das Event auf. Das soll natürlich nicht passieren!
Das habe ich dann gelöst, ich dem ich abgefangen habe ob der Focus auf dem Control ist.

Nun soll aber erst per MsgBox nachgefragt werden "Möchten Sie wirklich...".
Leider behält das Control weiterhin den Focus und klicke ich auf "Nein" fabriziere ich eine Endlosschleife.

Es muss doch eine Möglichkeit geben abzufragen ob der CheckState vom Code oder per z.B. Maus geändert wird....

Gruß,
TriB

EDIT: Gelöst

07.04.2009 - 10:32 Uhr

Hi mb3r,

Zu 2.)
Solche Sachen wir "FileNotFound" sind meist Anwenderfehler und nicht Anwendungsfehler. Also muss das vorher "per Hand" mit File.Exists(meinPfad) abgefragt werden und ist nichts für ein try-catch.
Dann gibt es eine MsgBox mit "Bitte geben Sie den Pfad an..."

Persönlich nutze ich try-catch nur für Dinge die ich selbst nicht steuern oder abfangen kann.
(Kopiervorgänge, Berechnungen aus fremden Funktionen, ftp up- & downloads, ect.)

06.04.2009 - 16:28 Uhr

Hallo DirkBusseFan,

du kannst wie JAck30lena sagt den Weg über das Event der Textbox gehen. Dort fragst du einfach ab ob die CheckBox gesetzt ist oder nicht.

Die andere Möglichkeit ist, das du die Events der Textbox erst deklarierst, wenn sie nötig sind.

Du gehst in den Propertys der Checkbox und definierst dort ein Event. (CheckChanged oder so ähnlich)
In diesem Event legst du dann "per Hand" die beiden Events für die Textboxen an:

if(CheckBox.Checked)
      this.txtZahl1.TextChanged += new System.EventHandler(this.Berechnung);
else
      this.txtZahl1.TextChanged -= new System.EventHandler(this.Berechnung);

Das ganze muss natürlich auch für das Textfeld 2 geschehen. Die Funktion, die in diesem Fall ausgeführt wird heißt "Berechnung".

Viel Erfolg,
TriB

31.03.2009 - 14:57 Uhr
new Bitmap()

erwartet einen Pfad. Kein Bild!

Abgesehen davon, das ein *.gif eben kein *.bmp ist.

Die Datei muss z.B. ein einen Stream geladen werden. Dann kannst du aus diesem auch ein Bitmap erstellen.

Gruß,
TriB

31.03.2009 - 09:11 Uhr

Mach das doch über den Aufruf:

http://localhost/ReportServer/ReportParameter/Report1&param1=1

Gruß,
TriB

30.03.2009 - 08:57 Uhr

Du kannst dem WebBrowser ein ContextMenuStrip hinzufügen.
Also CMS erstellen und in den Propertys des Browsers einbinden.

Dann hast du an jeder Stelle im Browser ein eigenes "rechte Maustaste"-Menü 😃

Gruß,
TriB

26.03.2009 - 11:33 Uhr

Hi Kaji,

also der Sinn der Sache ist folgender:
Wir benutzen ein Programm, in dem eine bestimmte Seite (z.B. Börsenkurse, Intranet, google, ect.) angezeigt wird.
Das klappt bis auf das Intranet auch wunderbar, da dort die AD benutzt wird.

Im IE werde ich garnicht nach einer Anmeldung gefragt. Der routet mich da durch (Automatische Authentifikation).
Im webBrowser hingegen kommt das die Seite nicht angezeigt werden konnte.
Kein Fenster wo ich meinen Login + pw eingeben kann. Nichts...

Ich gebe dir da absolut Recht, eine WinForm die nach Namen und PW fragt wäre die absolut letzte Möglichkeit.
Entweder soll der mich genauso wie beim IE automatisch anmelden oder den Windows Dialog öffnen, der im IE auch erscheint.

MfG
TriB

26.03.2009 - 08:47 Uhr

Guten morgen zusammen,

gibt es irgendein Property o.Ä. welches ich übersehen haben könnte um die Windows Authentifizierung bei einem WebBrowser Control zu aktivieren?

Die Anwendung zeigt mir eine Seite an, die vorher fest definiert wird. Handelt es sich um z.B. eine Seite aus dem Intranet, müsste das Control entweder die Informationen aus dem IExplorer nehmen oder nach dem Login & PW fragen.

Bei dem WebResponse gibt es die Möglichkeit diese Werte zu übergeben. Beim Browser wurde ich nicht fündig.

Dank Euch für jede Info 😃
TriB

13.03.2009 - 10:52 Uhr

Mit Programmen wie z.B. ManagedSpy o.Ä. kannst du Windowshandle nach Elementen durchsuchen. Damit könntest du an die Position einen Controls kommen.

Meiner Meinung nach ist das aber mit Kanonen auf Spatzen geschossen.
Ein Screenshot tool, welches dem Benutzer mit der Maus ein Rechteck auf den Bildschirm zeichnen lässt ist imho viel komfortabler.

Eine zu 99% durchsichtige Form über den Desktop legen, auf dieser ein Rechteck zeichnen (Draw.Rectangle, MouseDown, MouseMove) und die Position des Rechtecks abbilden.
Ist kein Hexenwerk 😃

Gruß,
TriB

13.03.2009 - 10:46 Uhr

Es gibt ein super Projekt welches dir diesen downgrade vereinfacht.
Da es offen ist, kannst du es ggf. auch wie gewünscht anpassen.

Mises.org/.../visual-studio-2008-to-2005-downgrade-utility.aspx

Gruß,
TriB

12.03.2009 - 09:17 Uhr

Probier es mal mit "&&".
Oder stell in den Properties des Elementes die Funktion mit dem unterstreichen aus.
(Hab vergessen wie der Property hieß...) 😄

05.03.2009 - 09:48 Uhr

Dazu fällt mir eine Weisheit eines sehr bekannten Linguisten ein.
Homer Simpson 😄

"Alkohol, Herkunft und Lösung aller Probleme"

Es grenzt ja schon an einem Paradoxon, wenn erst die Lösung die Frage wiederlegt 😉

27.02.2009 - 10:25 Uhr

Also diese Meldung kommt seit einem Sicherheitsupdate. Nicht mit dem SP3.
Es wird bei jeder Datei, die aus dem Internet geladen wird (Egal ob aus dem IE, Mozilla oder Email Client) ein Property in der Exe gesetzt, welches diese Meldung hervorruft.

Wenn man sich diese Meldung mal genauer ansieht, sollte man den Punkt "Für diese Anwendung nicht mehr Fragen" sehen und damit auch das Problem lösen können.

Gruß,
TriB

19.02.2009 - 10:17 Uhr

Dann gehst du aber den falschen Weg.

Normalerweise hast du deine Hauptform, die alle Programmteile steuert und auch das DGV beinhaltet.
Nun erstellt man eine Instanz der ExcelGenerator.cs und erstellt damit eine neue Exceldatei. Übergibt die Rows & Columns und speichert diese dann ab.

In meinem Fall heißt die Datei die alle Carlos AG Funktionen beinhaltet "WriteExcel.cs":

WriteExcel  Excel;
public Form1()
        {
        ...
        }

private void btnWrite_Click(object sender, EventArgs e)
        {
            if (Directory.Exists(txtFolder.Text))
            {
                lblAction.Text = "Schreibe Datei...";

                Excel = new WriteExcel();
                Excel.AddWorksheet("Dateien");
                Excel.NewRow();
                Excel.CellText("Mein Wert", "Style2");
                Excel.NewRow();  
               //Und so weiter
               Excel.SaveSheet(txtExcel.Text, true);
            }
        }

In der Form1 müsste sich demnach dein dataGridView1 befinden und wo ich nun "Mein Wert" übergeben habe, müsstest du deine Schleife für das DGV durchlaufen.

Ich hoffe das dir das mal einen Überblick über die Herangehensweise geben hat.

19.02.2009 - 10:03 Uhr

Ich kann keinen Filestream benutzen, da ich die Daten nicht aus einer Datei auslese sondern als byte-Array aus einer Datenbank...

Das mit dem FileStream war ja nur ein Beispiel. Der lässt sich natürlich einfach durch ein MemoryStream ersetzen.
Was eben nur wichtig ist, das dieser Stream "schnell" geschlossen wird und du keinesfalls auf|mit diesem Stream arbeitest.
Bild holen -> in eine Variable speichern -> Stream schließen -> Variable ändern
->neuer Stream -> Variable übergeben -> Stream zu.

Dazu musst du zwar zum speichern wieder einen neuen Stream erstellen und die Image Variable zurück in das Byte Array schreiben, aber damit solltest du auf der sicheren Seite sein.

19.02.2009 - 09:55 Uhr

Das WebBrowserControl hat glaub ich ne Property "AllowNavigate" oder sowas, die ist per Default auf false.

Das ist richtig, das es dieses Property gibt. Bei mir jedoch ist es standardmäßig auf true.
Bzw. die 1. Navigation ist normal möglich. Möchte man dann die Seite ändern greift das Property erst.

@Event abonieren:
Man kann auch einfach auf das WebControl klicken und in den Property´s das passende Event raussuchen. Ein Doppelklick in das Textfeld und das Event wird im Code abonniert.

18.02.2009 - 13:58 Uhr

Hi StazLyrixX,

also aus deinem Quelltext werde ich irgendwie nicht schlau...
Da ich auch des öfteren Probleme mit dem GDI Fehler hatte, habe ich mir eine Lösung gebaut die bis dato immer funktioniert hat:

                FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                picture = System.Drawing.Image.FromStream(fs);
                fs.Close();
                picBox.Image = picture;

Nun ist es wichtig daran zu denken die Variable sowie die picBox zu entleeren.
Wird das Bild nicht mehr verwendet oder durch ein neues ersetzt jedes mal:

            picBox.Image = null;
            picture = null;

ausführen.

Gruß,
TriB

18.02.2009 - 11:02 Uhr

Hallo dudero,

die MessageBox unterbricht deine Berechnung und lässt der Form Zeit den Text zu aktualisieren. Ist sie auskommentiert, wird Primär deine Berechnung ausgeführt und die Form aktualisiert nicht.

Schau dazu doch mal in:
[FAQ] Warum blockiert mein GUI?
[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke)

Gruß,
TriB

18.02.2009 - 10:54 Uhr

Hi littleg,

das ist doch kein wirkliches Office-Problem was du da hast.
Dein Carlos AG Writer funktioniert doch.

Dein Problem liegt vielmehr an der Bedienung des DGV.
Dieses kannst du in einer Schleife durchlaufen und prüfen ob die Reihe selektiert wurde:

for(int i = 0; i < DGV.Rows.Count,i++)
     If (DGV.Rows(i).Selected)
            //Hier schick den Datensatz an den ExcelWriter

So sollte das gehen. (gehört aber meiner Meinung nach zu den Grundlagen)

Gruß,
TriB