Laden...

Forenbeiträge von wcseller Ingesamt 196 Beiträge

07.09.2011 - 09:19 Uhr

Allerdings ist das mehr als unschön.

Da hast Du völlig recht - so ein 'aufräumen' ist doch nur notwendig, wenn Du beim 'Design' Deiner Anwendung vorher schon viel falsch gemacht hast. Dort - also bei den Ursachen - würde ich ansetzen statt an den Symptomen 'herumzudoktern'...

Gruß,

wcseller

23.08.2011 - 18:14 Uhr

oder einfach

klasse.getTreeView(this.treeView1)

und dann in Deiner 'getTreeView' keinen neuen, sondern den per Parameter übergebenen befüllen...

Gruß,

wcseller

26.07.2011 - 09:53 Uhr
  
foreach (MyRadioButton btn in Parent.Controls)  
  

könnte dabei Probleme machen. Für eine allgemeine Lösung müsste man, vorzugsweise rekursiv, über alle Parents drüberlaufen (und über deren Container-Children) und die RadioButtons aus der eigenen Gruppe einsammeln.

Richtig. Dann vllt. besser so:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace appfactum.cms.controls
{
    public class MyRadioButton : System.Windows.Forms.RadioButton
    {
        public string GroupName { get; set; }

        public MyRadioButton()
        {
            MyRadioButtonManager.RegisterButton(this);
        }

        ~MyRadioButton()
        {
            MyRadioButtonManager.UnRegisterButton(this);
        }
    }

    public static class MyRadioButtonManager
    {
        private static List<MyRadioButton> _buttons = new List<MyRadioButton>();

        public static void RegisterButton(MyRadioButton button)
        {
            if (_buttons.Contains(button) == false)
            {
                button.CheckedChanged += button_CheckedChanged;
                _buttons.Add(button);
            }
        }

        public static void UnRegisterButton(MyRadioButton button)
        {
            if (_buttons.Contains(button))
            {
                button.CheckedChanged -= button_CheckedChanged;
                _buttons.Remove(button);
            }
        }

        private static void button_CheckedChanged(object sender, EventArgs e)
        {
            if (sender is MyRadioButton && (sender as MyRadioButton).Checked)
            {
                foreach (MyRadioButton btn in _buttons)
                {
                    if (btn.GroupName == (sender as MyRadioButton).GroupName && !btn.Equals(sender))
                    {
                        btn.Checked = false;
                    }
                }
            }
        }
    }
}

Das würde dann sogar 'fensterübergreifend' funktionieren...

Gruß,

wcseller

26.07.2011 - 09:42 Uhr

Für 'normale' WinForms Anwendungen halte ich das für zeimlich illusorisch. Es gibt aber Frameworks, die ähnliches 'von Haus aus' unterstützen. Schaust Du hier:

http://www.devexpress.com/Products/NET/Application_Framework/

Dort bist Du dann aber natürlich an bestimmte Programmstrukturen gebunden.

Gruß,

wcseller

26.07.2011 - 09:20 Uhr

Wirf mal einen Blick auf die Eigenschaft 'Groupname' Deiner Radiobuttons...

Gruß,

wcseller

EDIT: Da war ich wohl etwas voreilig - diese Option gibts nur in WPF. In WinForms würde ich mir am besten eine eigene Radiobutton-Klasse ableiten, die sowas dann unterstützt. So etwa:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace appfactum.cms.controls
{
    public class MyRadioButton : System.Windows.Forms.RadioButton
    {
        public string GroupName { get; set; }

        protected override void OnCheckedChanged(EventArgs e)
        {
            base.OnCheckedChanged(e);

            if (Checked)
            {
                foreach (MyRadioButton btn in Parent.Controls)
                {
                    if (btn.GroupName == GroupName && !btn.Equals(this))
                    {
                        btn.Checked = false;
                    }
                }
            }
        }
    }
}

So in etwa könnte das gehen...

Gruß,

wcseller

22.07.2011 - 22:51 Uhr

Aber ich habe es schon richtig verstanden, dass ShareIt sowas wie eine Börse für Software und Resource Codes ist?

Keine Ahnung, was Du mit 'Börse' meinst?

ShareIt ist ein Dienstleister, der für Dich die Abwicklung des Verkaufs Deiner eigenen Software übernehmen kann.

Du stellst Deine Anwendungen dort ein und verlinkst dann z.B. von Deiner Website aus auf die eingestellten Anwendungen.

Der Kunde, der Deine Software erwerben möchte landet nun auf der Seite von ShareIt, wo er bestellen und bezahlen kann. Ist das geschehen, benachrichtigt Dich ShareIt, dass Deine Software verkauft wurde und wohin Du liefern sollst (es gibt auch noch weitere Möglichkeiten der Auslieferung).

Am Monatsende bekommst Du die Einnahmen aus dem Verkauf Deiner Software abzüglich einer Provision/Gebühr für ShareIt auf Dein Konto. Du musst Dich also nicht mehr selbst um die Fakturierung und das Inkasso kümmern und der Kunde hat den Vorteil, dass er mit Kreditkarte, per Rechnung etc. bezahlen kann.

Gruß,

wcseller

22.07.2011 - 10:28 Uhr
  • Die Lösung von wcseller hat das gleiche Problem wie meine Eigene.

Du hast Recht, man muss mit dem löschen natürlich von hinten beginnen:


IEnumerable<GroupBox> boxes = Controls.OfType<GroupBox>().Reverse<GroupBox>();
foreach (GroupBox box in boxes)
{
   Controls.Remove(box);
}

Gruß,

wcseller

22.07.2011 - 10:00 Uhr

So sollte es auch gehen:


IEnumerable<GroupBox> boxes = Controls.OfType<GroupBox>();
foreach (GroupBox box in boxes)
{
        Controls.Remove(box);
}

Gruß,

wcseller

22.07.2011 - 09:24 Uhr

Ich bin seit nunmehr fast 10 Jahren bei ShareIt. Im laufe der Zeit habe ich mir viele Alternativen angeschaut (ClickBank, TradeBit, PayPal etc.) - letztendlich bin ich aber immer wieder bei ShareIt gelandet. Derzeit sehe ich keinen Anbieter, der da auch nur ansatzweise mithalten kann.

Mein Tip also: Erstell Dir für ein paar Cent eine Homepage und melde Dich dann damit bei ShareIt an. Künftig wirst Du ja sicherlich auch iregdneine Anlaufstelle im INet für Deine Kunden brauchen...

Gruß,

wcseller

29.06.2011 - 18:52 Uhr

denke das XtraRichEdit Control könnte das richtige sein.

Kommt ganz drauf an, was Du mit dem HTML-Code anstellen willst. XtraRichEdit verwendet Inline-Stylesheets zur Formatierung, die sich längst nicht für jeden Zweck eignen.

Für einfache HTML-Editoren wie Du Sie suchst, reicht auch das Webbrowser-Control im DesignMode (z.B. hier: Zeta HTML Edit Control).

Gruß,

wcseller

30.05.2011 - 21:49 Uhr

Sehr realistisch ^^ Ich kenne hunderte Leute, die das machen wollten, und keinen einzigen, der tatsächlich mal was verkauft hat. Da ist es noch viel realistischer, einen Freelancer Job zu finden, wobei sich da die Wahrscheinlichkeit auch in Grenzen hält.

Momentan fehlt leider noch ein entsprechender Distributionskanal unter Windows, aber schau Dir mal die Statistiken des Mac AppStores an. Ich finde es z.T. wirklich unglaublich was da mit Programmen, die nur einige EUR kosten verdient wird. Mangels eben dieses einfachen Kanals für den Vertrieb gibt es sowas bisher unter Windows eigentlich nicht.

Das müssen IMHO gar nicht wahnsinnig komplexe Programme sein, sondern sie müssen nur das was sie tun sehr einfach und komfortabel machen - es muss Spaß machen die Programme zu benutzen (Stichwort 'User Experience'). Schöne Beispiele sind z.B. 'Remember the Milk' oder die Programme von MoApp (www.myownapp.com).

30.05.2011 - 16:07 Uhr

Hallo Benedikt,

vllt. noch als kleine Anregung:

Wie wäre es, wenn Du Dir selbst kleine nützliche Anwendungen ausdenkst, die Du dann verkaufen kannst.

Der Windows-AppStore (oder wie auch immer das Ding in Windows 8 heißen wird) scheint ja so langsam in greifbare Nähe zu rücken und da sind kleine, smarte Anwendungen sicher sehr gut aufgehoben. Ich kann mir auch vorstellen, dass es für solche Anwendungen gerade unter Windows noch einen 'erklecklichen' Markt gibt. Hier lohnt z.B. ein Blick über den Tellerrand zum MacAppStore - dort kann man sich schon jede Menge Anregungen holen, sieht was gut und was eher schlecht läuft etc..

Bis es soweit ist, kannst Du die gesamte Verstriebsabwicklung auch Firmen wie shareit (www.shareit.com) etc. überlassen. Da musst Du nicht selbst um das Inkasso kümmern...

Von diesen 'kleinen' Freelancer-Projekten möchte ich Dir aus eigener Erfahrung eher abraten. Ich habe selbst zwei Jahre als 'Freelancer' gearbeitet. Würde ich nie wieder machen. Terminstress, Haftuns-/Gewährleistungsfragen, jede Menge nichtbezahlte 'Nebentätigkeiten' (Absprachen etc.) und nur selten kommt man letztendlich auf vernünftige Stundenlöhne.

Gruß,

wcseller

02.05.2011 - 16:53 Uhr

Nur mal so 'ins Blaue' geraten:

Versuchs mal mit einem

...Activate();
Application.DoEvents();
Bitmap sc1...

Gruß,

wcseller

05.04.2011 - 19:06 Uhr

Man muss nur irgendwo im Aboutfenster auf die verlinken.

Wo hast Du das denn her? Schau mal in die FAQs (http://www.vistaicons.com/faq.htm)

Gruß,

wcseller

05.04.2011 - 19:04 Uhr

Werkzeug: Axialis Icon Workshop (www.axialis.com) und die dort drin enthaltenen Iconsets.
Iconsammlung: IconExperience (www.IconExperience.com) und IconEden (www.IconEden.com).

Und Vorsicht bei VistaIcons, die sind nur 'for free' für 'personal use' und nicht für kommerzielle Projekte...

Gruß,

wcseller

11.03.2011 - 13:57 Uhr

Warum nicht einfach so:

for(int i; i<=24;i++)
{
   (Controls["tbx"+i] as TextBox).Text=StringArray[i];
}

BTW: Hast Du dran gedacht, dass es bei der Konstellation TextBoxen mit den Namen tbx0 bis tbx24 geben muß? ALso nicht 24 sondern 25?

Wenn Du mit tbx1 bis tbx24 arbeitest eher so:

for(int i=1; i<=24;i++)
{
   (Controls["tbx"+i] as TextBox).Text=StringArray[i];
}

Gruß,

wcseller

01.03.2011 - 20:42 Uhr

Wie genau wird denn gesichert? Liegen die Daten auf einem NTFS formatierten Laufwerk?

Man kann mittels VSS/Volume Shadow Copy Service auch geöffnete Dateien sichern. Beispiele rund um VSS gibt es im Netz viele, z.B. das hier:

http://alphavss.codeplex.com/

Gruß,

wcseller

10.01.2011 - 15:14 Uhr

Bevor Du anfängst selbst was zu basteln, schau Dir das hier mal an:

https://www.devexpress.com/Products/Free/NetOffer/

Und dort speziell: ButtonEdit

Gruß,

wcseller

01.06.2010 - 20:26 Uhr

Das geht auch deutlich einfacher:


protected override void WndProc(ref Message msg)
{
    if (msg.Msg == 0x84) // WM_NCHITTEST
       msg.Result = (IntPtr)0x02;  // HTCAPTION
    else
       base.WndProc(ref msg);
}

Gruß,

wcseller

30.04.2010 - 08:56 Uhr

Kennt jemand einen guten (vorzugsweise deutschsprachigen) Anbieter von Komponenten für VS 2008/2010?

Deutschsprachige Anbieter kenne ich keine, aber mit diesen hier hab ich sehr gute Erfahrungen gemacht:

www.devcomponents.com
www.devexpress.com

Ausserdem kenne ich noch:

www.telerik.com
www.infragistics.com

Qualitativ am besten finde ich DevExpress am besten. DevComponents sind was die Anwendung angeht am flexibelsten...

Also Informationsquelle empfiehlt sich www.componentsource.com.

Gruß,

wcseller

23.04.2010 - 14:55 Uhr
  1. funktioniert das auch bei geraden abschnitten?

Das ist jetzt aber nicht Dein ernst oder 😉

  1. wie könnte solch ein Bezieralgo aussehen?

z.B.: http://www.codeproject.com/KB/graphics/BezierSpline.aspx

Gruß,

wcseller

16.04.2010 - 16:01 Uhr

((MeinForm)this.Parent)
sorry, das ist ganz schlechtes Design, führt zu enger Koppelung und unnötigen Abhängigkeiten in der Anwendung. Du hast gezeigt, wie man es auf keinen Fall machen sollte. Klassen sollten sich immer nur in eine Richtung kennen, nie umgekehrt. Forms dürfen UserControls kennen, aber nicht umgekehrt. Das ist auch nie nötig.

Klar ist das nicht unbedingt die feine englische Art, aber wenn der TO schon this.parent.Controls.Clear() aufruft, ist das bischen mehr an Bindung auch egal... Ich selbst würde es natürlich niemals so machen (ich würde einfach den Button auf das Form legen, wo ich das Panel schon befindet) - aber eine schnelle, pragmatische Lösung für sein Problem ist es allemal und in diesem Kontext hier IMHO auch völlig legitim...

Gruß,

wcseller

16.04.2010 - 14:31 Uhr

Ich denke, das sollte nicht

if (read==0)
  break;

sondern

if (read<1024)
   break;

heissen.

Gruß,

wcseller

16.04.2010 - 14:19 Uhr

Erstelle statt der zu öffnenden Fenster UserControls und zeige diese dann in einem Panel Deines Hauptfensters an, bei dem Du Dock=DockStyle.Fill gesetzt hast.

Auf diese Weise kannst Du aber immer nur ein 'Fenster' (hier UserControl) anzeigen - ich hoffe es sit das, was Du willst. Ansonsten schau mal nach dem Stichwort 'MDI'...

Gruß,

wcseller

16.04.2010 - 13:54 Uhr

Desweiteren kann die Datei auch für andere Zwecke als dem speichern von Einstellungen dienen, zum Beispiel könnten darin Spielstände oder Highscores etc. gespeichert werden.
Dem Argument halte ich einfach mal das
>
entgegen. 🙂

Warum sollte das gegen Single-Responsibility verstoßen? Was unterscheidet diese Einstellungen von anderen?

Settings werden versionsbezogen gespeichert. Gibt es eine neue Version der Anwendung, stehen die Einstellungen der alten Version nicht mehr ohne weiteres zur Verfügung.
Also für mich ist der Aufruf von Settings.Upgrade() und ein setzen einer zusätzlichen Property Upgraded kein nennenswerter Aufwand... 😉

Kann man sicher so machen, muss man aber nicht. Die Verwaltung der Einstellungen (User- wie auch Application-Settings) in einem eigenen System kann viele Vorteile bringen (z.B. umschalten zwischen versch. Settings ja nach Rolle des Users, mehrstufige Settings-Szenarien (Global, Arbeitsgruppe, User etc.) uvm.). Das bekommst Du mit den .NET eigenen Methoden nur schwerlich hin (ich sag ja nicht, dass es nicht geht)...

Gruß,

wcseller

16.04.2010 - 13:40 Uhr

Hallo,

was hindert Dich daran, statt Clear irgendeine andere methode des Parents aufzurufen?

Ich gehe mal davon aus, dass 'Parent' vom Typ 'MeinForm' ist:

((MeinForm)this.Parent).MeineMethode();

Und in der 'MeineMethode' dann z.B.:

this.panel1.Clear();
this.panel1.Add(new NeuesControl());

usw...

Wozu kapselst Du eigentlich 'new_pos'? Das kannst Du doch auch direkt zuweisen:

Q1.Location.new Point(0, 250 * i);

Ausserdem solltest Du Dir mal die Klassen FlowLayoutPanel und TableLayoutPanel anschauen...

Gruß,

wcseller

16.04.2010 - 12:53 Uhr

Also prinzipiell finde ich die Idee gut (verwende schon seit langer Zeit eine eigene Logik um die Einstellungen zu verwalten).

Allerdings hat Deine Lösung einen entscheidenden Nachteil. Das ganze erlaubt keinen streng typisierten Zugriff auf die Einstellungen. Ich arbeite daher mit einer serialisierbaren Klasse, die für jede Einstellung ein Property enthält. Ein Objekt dieser Klasse lade und deserialisiere ich dann beim Programmstart und beim beenden wird das Objekt wieder serialsiert in der Einstellungsdatei abgelegt.

Zu den 'Warum' und 'Wozu' -Fragen der bisherigen Poster:
Das .NET eigene Konfigurationsmanagement hat ein paar Einschränkungen, die nur mit relativ hohem Aufwand zu umschiffen sind. Bsp.:

Settings werden versionsbezogen gespeichert. Gibt es eine neue Version der Anwendung, stehen die Einstellungen der alten Version nicht mehr ohne weiteres zur Verfügung.

In MultiUser-Umgebungen, bei denen die Anwendung nicht lokal installiert ist, ist eine einheitliche und flexible Verwaltung und Ablage der Anwendungseinstellungen nicht ohne weiteres realisierbar.

Um nur mal zwei Punkte zu nennen...

Gruß,

wcseller

19.02.2010 - 23:13 Uhr

Hallo baer999,

ich mach das so:

Mein Hauptfenster enthält ein 'PanelBlend', in dem sich alle Controls befinden. Dieses Panel kann ich z.B. mit BlendPanel(Color.FromArgb(128,Color.Black)) 'abblenden'. Wenn ich das getan habe, hole ich ein weiteres Panel, das normalerweise Visible=false ist und das sich 'über' dem Hintergrundpanel befindet mit Visible=true hervor. Hier noch ein wenig Code dazu...


public class PanelBlend : System.Windows.Forms.Panel
    {
        private Image _OrgBackgroundImage;     // Original-Hintergrundbild 
        private Bitmap _ScreenShot;            // Screenshot des Panels 
        private ImageLayout _OrgLayout;        // Original-ImageLayout
        private bool _blended;

        /// <summary>
        /// Liefert den Inhalt des Panels als Bitmap (ScreenShot)
        /// </summary>
        /// <returns>ScreenShot Bitmap</returns>
        public Bitmap GetScreenShot()
        {
            Bitmap oRet = new Bitmap(Width, Height, PixelFormat.Format32bppArgb);
            Graphics gfxScreenshot = Graphics.FromImage(oRet);

            Point oLeftTop = PointToScreen(new Point(0, 0));
            gfxScreenshot.CopyFromScreen(oLeftTop, new Point(0, 0), Size, CopyPixelOperation.SourceCopy);

            return oRet;
        }


        /// <summary>
        /// den Inhalt des Panels 'ausblenden'. Dabei werden alle Controls auf dem Panel 'disabled'
        /// </summary>
        /// <param name="oBlendColor">Farbe dir zum abblenden verwendet werden soll</param>
        public void BlendPanel(Color oBlendColor)
        {
            if (_blended == false)
            {
                SuspendLayout();
                _ScreenShot = new Bitmap(Width, Height, PixelFormat.Format32bppArgb);

                Graphics gfxScreenshot = Graphics.FromImage(_ScreenShot);

                Point oLeftTop = PointToScreen(new Point(0, 0));
                gfxScreenshot.CopyFromScreen(oLeftTop, new Point(0, 0), Size, CopyPixelOperation.SourceCopy);

                gfxScreenshot.FillRectangle(new SolidBrush(oBlendColor), 0, 0, Width, Height);

                if (BackgroundImage != null)
                {
                    _OrgBackgroundImage = BackgroundImage;
                    _OrgLayout = BackgroundImageLayout;
                }

                foreach (Control ctrl in Controls)
                {
                    ctrl.Hide();
                }

                BackgroundImage = _ScreenShot;
                BackgroundImageLayout = ImageLayout.None;
                ResumeLayout();
                _blended = true;
            }
        }

        /// <summary>
        /// Ein mit 'BlendPanel' abgeblendetes Panel wieder normal darstellen
        /// </summary>
        public void UnBlendPanel()
        {
            if (_blended)
            {
                SuspendLayout();
                if (_OrgBackgroundImage != null)
                {
                    BackgroundImage = _OrgBackgroundImage;
                    BackgroundImageLayout = _OrgLayout;
                }
                else
                {
                    BackgroundImage = null;
                }
                _ScreenShot.Dispose();

                foreach (Control ctrl in Controls)
                {
                    ctrl.Show();
                }
                ResumeLayout();
                _blended = false;
            }
        }
        #endregion
    }

Gruß,

wcseller

30.01.2009 - 10:29 Uhr

Ich denke, dazu musst du dir erstmal eine entsprechende Bibliothek suchen, die mit mehrseitigen Tiffs umgehen kann. Mit dem .NET Framework direkt geht das nicht.

Nee. Das stimmt so nicht. Die Klasse Image kann sehr wohl mit mehrseitigen TIFFs umgehen. Interessant sind hier vor allem die Methoden GetFrameCount, SelectActiveFrame und SaveAdd...

Schöne Grüße,
wcseller

23.01.2009 - 22:57 Uhr

Ich würde bei den im Panel hinzugefügten Controls einfach .Dock=DockStyle.Top setzen und beim Panel AutoScroll einstellen.

21.01.2009 - 15:01 Uhr

kann es sein, dass ich für Child-Controls in einem FlowlayoutPanel keine Anchor setzen kann?

Richtig. Es ist ja gerade der Sinn und Zweck des FlowLayoutPanels, dass die enthaltenen Controls 'fließen' können.

Was genau willst Du denn tun, vielleicht eignet sich ja z.B. Panel besser?!

19.01.2009 - 19:32 Uhr

Ich will doch nur ein Image am Ende der Box zeichnen.

Wenn ich das richtig verstehe, dann google mal nach 'TextBox WM_NCCALCSIZE WM_NCPAINT'. Da solltest Du einige Lösungen finden. Im groben gehts darum, die sog. NonClinet Area zu erweitern (und damit den Eingabebereich einzuschränken) um dann in dem erweiterten Bereich das Image zu zeichnen. Man sieht das öfter mal in Form von Buttons am Ende der Textbox, die dann z.B. einen Dialog öffnen...

19.01.2009 - 19:07 Uhr

Ca. 230 EUR. Ich kenn Deinen Background nicht, aber sicher - für Hobbyprogrammierer keine Pappenstiel, für Leute, die damit Ihr Geld verdienen hingegen jeden Cent wert - wenn man mal sieht, was man an Zeit spart und an Möglichkeiten hat...

17.01.2009 - 18:48 Uhr

Hallo,

das hier sollte können, was Du suchst (und noch so einiges mehr). Kostet allerdings ein bischen was, lohnt sich aber auf alle Fälle...

14.01.2009 - 08:10 Uhr

Das muss x<tabControl.TabPages.Count heissen. Da Du ja x als Index für den Zugriff auf die TabPages verwendest und dieser Index 0 basiert ist, hat die letzte TabPage den Index tabControl.TabPages.Count-1...

Ändere das mal und schau dann, ob Dein Fehler immernoch auftritt... Sollte dies nicht der Fehler gewesen sein beschreibe bitte, was genau passiert. 'Aufhängen' im Sinne von 'es tut sich nichts mehr, aber der Task läuft noch' deutet auf eine Endlosschleife hin...

Überprüfe bitte auch 'privatestring'. Es ist nicht ersichtlich, wo dieser herkommt und was genau er enthält. Gut denkbar, dass es am Inhalt dieser Variablen liegt (Du schreibst ja, dass RichTextBox.Text += text; funktioniert)...

Gruß,
wcseller

03.12.2008 - 22:34 Uhr

Wenn Du auf MAPI verzichten willst und dennoch über den Standardmailer des Anwenders senden möchtest, bleibt Dir wohl momentan nichts anderes übrig als zu versuchen jeden einzelnen Mailer gezielt anzusprechen, sofern das überhaupt möglich ist oder eben Dich auf wenige 'Standardprogramme' wie Outlook zu beschränken.

"mailto" und Konsorten sind in den verschiedenen Email-Programmen sehr unterschiedlich implementiert/unterstützt. Manche akzeptieren Anhänge auf diesem Weg (&attachment=dateiname), manche eben nicht.

Ich habe allerdings noch von niemandem gehört, der mit der Verwendung von MAPI unter .NET Probleme hatte. Selbst versende ich Emails lieber via der .NET eigenen Klassen aber klar, damit stehen diese natürlich auch nicht im 'Postausgang'...

Gruß,

wcseller

03.12.2008 - 19:15 Uhr

Hallo pkoeppe,

Du testest zwar schon was, aber wenn es auch was kosten darf, kann ich Dir unbedingt das hier empfehlen: http://www.devexpress.com/Products/NET/Controls/WinForms/Grid/

Kann neben dem AutoFilter noch vieles mehr...

Gruß,

wcseller

03.12.2008 - 19:10 Uhr

Hallo Witch1986,

das mit Deinen 3 PictureBoxen erscheint mir ja recht abenteuerlich. Vielleicht hilft Dir das hier weiter: http://www.codeproject.com/KB/graphics/CroppingImages.aspx

Oder such mal nach GDI+ und RubberBand oder GDI+ und XOR...

Gruß,

wcseller

03.12.2008 - 18:57 Uhr

Hallo Karle123,

ich tippe mal auf ein Koordinaten-Problem in Deiner Drop-Funktion. Kannst Du mal ein wenig Code herzeigen?

Gruß,
wcseller

03.12.2008 - 18:53 Uhr

Hallo noi76,

> MAPI und RDO werden von Net nicht unterstützt?
Ist Dein Googleoderwasauchimmer kaputt?

Gleich der erste Treffer für "MAPI .NET":
http://www.codeproject.com/KB/IP/simplemapidotnet.aspx

Gruß,
wcseller

03.12.2008 - 18:47 Uhr

Hallo frogbender,

zu 1.:
Was erwartest Du, wenn Du in dieser Ebene einen Druckjob abgreifen möchtest, erhälst Du natürlich Druckerspezifische Daten (also PCL, Postscript oder was auch immer Dein Drucker versteht). Das ganze ist ja in diesem Moment schon 'durch den Druckertreiber durch'. Ich könnte mir vorstellen, dass die Drucker nicht zwangsläufig vom gleichen Typ sein müssen, aber schon die 'gleiche Sprache' sprechen müssen.

Vielleicht eine Idee, die mir so spontan beim lesen kam, als ich Deine Frage sah - allerdings geht das nicht ohne Änderung an der Konfiguration:

Versuch doch mal einen PostScript-Drucker einzurichten, dessen Ausgabe Du in eine Datei umleitest. Die entstehende Postscriptdatei könntest Du dann auf jedem beliebigen PostScript-fähigen Drucker und oder z.B. mit GhostScript ausgeben - auch an mehrere gleichzeitig. Was Du schreiben müsstest, wäre eine kleine Anwendung, die prüft ob es eine neue Postscript-Datei gibt und dieses dann auf die physischen Drucker schickt. Der Anwender würde/müsste dann immer auf den eigens eingerichteten PostScript-Drucker drucken.

Hier noch eine Anwendung bei der Du dir vllt. noch was zum Thema abschauen kannst: http://www.papercut.com/products/ng/

Gruß,
wcseller

19.09.2008 - 12:28 Uhr

Vielleicht ist das hier:

http://www.sqlmaestro.com/products/anysql/maestro/

ja was für Dich...

14.09.2008 - 18:35 Uhr

Schwierig was zum 'Design' zu sagen. Zuerst müsste man mal wissen, was Du mit dem Editor vorhast. Ist es nur ein Projekt für Dich selbst oder sollen später auch andere davon profitieren? Willst Du später mal eine 'Bezahlversion' herausbringen? Nur soviel vielleicht: im Moment wirkt es auf mich etwas 'hobbystyle'. Ich würde die Farbverläufe in Toolbars etc. nur benutzen, wenn der Rest von der Optik her auch dazu passt (Tabs etc). Nimm Dir hier ruhig ein Beispiel an aktuellen Anwendungen wie 'Expression Web', Dreamweaver oder Netobjects Fusion.

Grundsätzliches zu HTML-Editoren:
Bedenke immer, dass es schon ziemlich viele solcher Tools auf dem Markt gibt - darunter auch viele kostenfreie - an denen Du Dich messen lassen musst. Für die Zielgruppe 'Einsteiger' sind eher WYSIWYG-Editoren gedacht, die meist optional auch noch eine Code-Ansicht/ einen Code-Editor bieten. 'Profis' benötigen ein Tool, dass ihnen die Arbeit wirklich durch sinnvolle Funktionen erleichtert.

An Deiner Stelle würde ich mich erstmal bei den vorhandenen Tools umschauen und dann überlegen, wer a) die Zielgruppe ist und b) womit Dein Tool sich von den anderen abheben soll. Hier ein paar Links zur Anregung:

http://www.codeproject.com/KB/dotnet/fireedit.aspx
http://www.codeproject.com/KB/cpp/DHTMLEditor.aspx
http://www.codeproject.com/KB/miscctrl/csEXWB.aspx
http://www.phase5.info/
http://de.wikipedia.org/wiki/Liste_von_HTML-Editoren

Gruß,

wcseller

14.09.2008 - 15:23 Uhr

Hallo,

Du musst bei einer Deiner Spalten (z.B. Datenbankname) die Eigenschaft AutoSizeMode auf Fill setzen...

Gruß,

wcseller