Laden...
Avatar #avatar-3271.jpg
rollerfreak2 myCSharp.de - Member
Software Architekt Dabei seit 14.07.2008 916 Beiträge
Benutzerbeschreibung
Man lernt nie aus...

Forenbeiträge von rollerfreak2 Ingesamt 916 Beiträge

04.11.2009 - 09:58 Uhr

Ein kleiner tip. Wenn du dir keine eigene Lösung bauen willst, dann füge einfach ein leeres also transparentes Icon in die ImageList und dann setz den index auf genau dieses Icon. Das ist zwar nicht schön aber selten und es funktioniert.

20.10.2009 - 15:39 Uhr

Ok in diesem speziellen Fall ist es sinnvoll das man direkt in Form1 das Close der Form2 aufruft.

20.10.2009 - 15:13 Uhr

Man sollte sowas über Events lösen. Daher Form2 sollte sich an einem CloseEvent der Form1 anmelden, und Form1 feuert dieses dann nur noch. Siehe dazu Kommunikation zwischen 2 Forms.

15.10.2009 - 09:29 Uhr

Als kleine Anmerkung neben bei, Umlaute sind im Code nicht erwünscht...!
Wenn du die Pens alle mit einmal Initialisieren willst schau dir mal den out Parameter an.

15.10.2009 - 09:25 Uhr

Als erstes mal solltest du uns sagen was das für eine Anwendung ist. Du könntest in dem catch block einen bool wert z.B. isError auf true setzen. Und dann in der Aufrufenden Funktion das Programm beenden. Wenn du dann nämlich z.B. in der Main bist sollte es kein Problem sein. Bist du in einer Form kannst du mit .Close() die Form Closen und landest dann dort wo du Form.Show() aufgerufen hast und kannst eventuell auf den isError reagieren.

13.10.2009 - 11:27 Uhr

Jedes Control das von Control abgeleitet ist, dazu zählt auch der Button hat eine Property namens ENABLE.

Setzt die auf false und der Button ist disabled. Im übrigen eine einfach suche in der MSDN hätte dir schon geholfen...

08.10.2009 - 14:32 Uhr

Hallo herbivore,

so gehts natürlich auch. Danke euch

08.10.2009 - 14:17 Uhr

Also wenn ich deinen Pattern mit RegexLab teste dann kommt folgendes raus. Und das entspricht ja nicht dem was ich will.

[Edit] So funktioniert es

[#]*?$

Der Ausdruck ist kürzer als meiner 😃

08.10.2009 - 14:13 Uhr

Ich versteh das Problem ehrlich gesagt auch nicht. Wenn du in Form2 einen Dialog öffnest, und du den Dialog dann schließt, dann landest du doch nicht in Form1. Das ist mir ein Rätsel wie das gehen soll?!?!?

Dabei spielt es keine Rolle ob du Form2 aus igendeiner anderen Form heraus öffnest. Aber vielleicht verstehe ich dich falsch und du meinst etwas anderes...

08.10.2009 - 12:28 Uhr

So wie du es machst bekommst du keine "einzelnen" Zeilen, das ist das Problem. Du kannst mir gern das Gegenteil beweisen!

08.10.2009 - 11:55 Uhr

Ok das detail habe ich übersehen.


"^[^#][^#]*$[^#]"

08.10.2009 - 11:40 Uhr

Genau das ist ja das Problem. Ich will alle Zeichen bis auf #. Aber wie formuliert man das in Regex?
Die Regex Optionen kenne ich, Multiline und Singleline. Ich möchte aber jede einzellne Zeile habe. Sprich der Regex soll an einer Zeile beginnen, dannn bis zum Zeilenende aber kein # enthalten.

08.10.2009 - 11:25 Uhr

Hallo zusammen ich hab grad ein regex Problem.

Ich möchte in einem Text jede Zeile finden die kein "#" enthält.

Daher


sadfadsfgasdgafg#afdgydfg
adfgadfgsfdla
adfgdsfgsdfg#dgdfg
sdfsdfsdf

Der regex soll also 2 matches haben. Nämlich Zeile 2 und 4. Aber ich bekomm den nicht hin.

Ich dachte an [^#.]* aber das funktioniert nicht.

Kann mir jemand helfen?

05.10.2009 - 08:40 Uhr

Hast du mal folgendes ausprobiert MSDN Auszug. Kommst du so an das Item ran?

02.10.2009 - 20:38 Uhr

Nicht generische Listen sollten m.E. nicht mehr benutzt werden.

02.10.2009 - 20:35 Uhr

Hallo Seba1986,

und Willkommen hier im Forum. Was hast du denn bis jetzt raus gefunden? Was willst du den versenden (Daten?). Ein Stichwort für dich wäre z.B. EVENTING.

01.10.2009 - 09:51 Uhr

Mal nebenbei ich hab das Gefühl du liest dir die Artikel/Threads gar nicht durch, kann das sein?
Und zu deinem Code, den find ich schon sehr verwirrend

Wieso haben v98 un v99 die selbe Signature, machen aber was anderes (geschuldet der Tatsache das sie 2 mal auftauchen)?
Man sollte versuchen "sprechende" Methodennamen zu verwenden.

29.09.2009 - 12:11 Uhr

Das sind aber Grundlagen und gehören M.E. zu Wie poste ich richtig Punkt 1.1.1

28.09.2009 - 10:39 Uhr

Hallo zusammne,

ich hab eine Assembly die Sprachabhängige Satellite Assemblies hat. (EN-DE)
Nun möchte ich gern einen "string" der Englischen Resource anpassen, ich hab aber den Code nicht, daher ich kann den nicht im Studio ändern. Deswegen brauche ich einen Editor der es mit Erlaubt Teile der Resourcen zu ändern, und zu speichern. Geht sowas bzw. gibt es sowas, und wenns geht für free!

Danke im vorraus.

28.09.2009 - 09:20 Uhr

Die Idee ist nicht schlecht, nur musst du ausprobieren ob du damit den Effekt gut hin bekommst. Du kannst auch zusätzlich den Alpha Kanal des Panels auf 0 setzen und dann langsam an 255 annähern, dann blendet sich das Panel auch von der Transparenz mit ein. Eventuell wirkt es dann flüssiger.

25.09.2009 - 13:55 Uhr

Hast du es mal mit MouseDown probiert? Und dort kannst du dir ein Flag setzen und merken ob die rechte Maustaste gedrückt wurde, und entsprechend im MouseUp event darauf reagieren.

24.09.2009 - 10:21 Uhr

Du gehst damit niemand auf den Geist 😃
Ich geb dir voll und ganz recht, für Tabellendarstellung ist das DGV einfach besser geeignet, das ListView ist zwar leichter zu "handeln", aber das DGV dafür deutlich mächtiger. Nicht zu vergessen die Performance, die beim DGV gegenüber dem ListView auch nicht unerheblich ist.

24.09.2009 - 09:29 Uhr

Das wollt ich auch grad hinzufügen herbivore. Damit ist alles gesagt...

24.09.2009 - 09:04 Uhr

Doch es geht ohne schleife! Prüfe doch mit Regex auf den Anfang des Strings und dann nur Digits. Das müsste also auch gehen.


public int atoi(string source)
{
    Regex regex = new Regex(@"^([-\d]\d*)");
    Match match = regex.Match(source);
    if (string.IsNullOrEmpty(match.Value))
    {
        throw new ArgumentException("The string does not contain digits.");
    }

    return Int32.Parse(match.Value);
}

[Edit] Hatte das minus vergessen mit zu Parsen.

18.09.2009 - 09:18 Uhr

Ja das geht mit Regex.


Regex re = new Regex("(?<=Herbert).*?(?=Stefan)");
re.Replace(soruce, string.empty);

Stichwort positver Lookahead und positiver Lookbehind.

(?≤(regex),(?=(regex), dadurch sucht die Enginge den regex, aber er gehört nicht zum match.

18.09.2009 - 08:23 Uhr

am rande: Die textboxen die ich setzen will sind zu diesem zeitpunkt unsichtbar, könnte es damit zu tun haben?

Nein du kannst generell keine Steuerelemente von einen anderen Thread, als den der sie erstellt, hat updaten. Benutze dazu immer ein Delegate. Schau dir auch mal den Thread an, sollte dir helfen.

17.09.2009 - 13:30 Uhr

Ok, ändere den Titel bitte noch in [gelöst] ab.

17.09.2009 - 13:21 Uhr

Dann musst du wohl selber eine TextBox zeichnen. Das ist ja nicht so schwer. Und dort dann deine Schriftart verwenden.

17.09.2009 - 13:20 Uhr

Das stimmt, aber da du schreibst ich werde "aber" meine Lösung weiter benutzten, schließe ich daraus das deine Lösung Vorteile hat. Lass uns an diesen Vorteilen teilhaben.

17.09.2009 - 13:18 Uhr

Schau ob das bild richtig gesetzt wird. Am einfachsten du lädst es mal schnell in eine PictureBox und schaust ob es angezeigt wird. Wenn du die ListView im Detailed view anzeigen möchtest, also z.B. mit mehreren Spalten, dann musst du die Bilder selber zeichnen. HAb mal ein kleines Beispiel angehängt.


public class ImageListView : ListView
{
    private ImageList m_imageList;

    public ImageListView()
    {
        this.OwnerDraw = true;
    }

    public ImageList DetailImageList
    {
        get
        {
            return this.m_imageList;
        }
        set 
        {
            this.m_imageList = value;
        }
    }

    protected override void OnDrawItem(DrawListViewItemEventArgs e)
    {
        base.OnDrawItem(e);
    }

    protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e)
    {
        base.OnDrawColumnHeader(e);
        e.DrawBackground();
        using (SolidBrush brush = new SolidBrush(this.ForeColor))
        {
            e.Graphics.DrawString(e.Header.Text, this.Font, brush, e.Bounds.Location);
        }
    }

    protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e)
    {
        base.OnDrawSubItem(e);
        e.DrawBackground();
        using (SolidBrush brush = new SolidBrush(this.ForeColor))
        {
            e.Graphics.DrawString(e.SubItem.Text, this.Font, brush,
                e.Bounds.Location.X + this.DetailImageList.Images[0].Width, 
                e.Bounds.Location.Y);
            e.Graphics.DrawImage(this.DetailImageList.Images[0],
                e.Bounds.Location.X,
                e.Bounds.Location.Y);
        }
    }
}


Es wird noch keine Selction und Focus beachtet. Auch müsstest du die SubItem Klasse ableiten und ihr ein ImageIndex verpassen sodass du jeweils das richtige Image zeichnest.

17.09.2009 - 12:45 Uhr

Hallo joschika77,

sorry wenn ich das so sage, aber wer lesen kann ist klar im Vorteil. Guckst du ListView.LargeImageList-Eigenschaft.

This will fix the problem

this.myArticleLv.View = View.LargeIcon;

grüße rollerfreak2

17.09.2009 - 08:40 Uhr

Werde aber meine eigene weiterbenutzen und nur auf "Rectangle rect = this.GetTabRect(i);" zurückgreifen.

Aber du hattest doch gar keine eigene Lösung, wieso dann also weiterbenutzen? Unsere (die von ErfinderDesRades und mir) funktioniert doch einwandfrei, was gibt es daran auszusetzen?

16.09.2009 - 12:43 Uhr

Das ist mir schon klar das ein Koordinatensystem wie man es aus dem Matheunterricht kennt in Abzissenrichtung nach oben wächst. Aber wenn man den Mittelpunkt von oben Links in die Mitte verlagert, dann ist es nun mal so wie ich beschrieben habe.

16.09.2009 - 11:34 Uhr

@ErfinderDesRades

Das ist äquivalent zu meiner Lösung 😃

16.09.2009 - 10:17 Uhr

Dann hast du das aber meiner Meinung nach falsch beschrieben. Du hast ein Koordinatensystem das bei 0,0 nach oben wächst. Wenn du aber einen Punkt verschiebst, so wie du das erklärt hast, dann ist der obere linke Punkt im Ordinate sowie Abzisse negativ, oder hab ich da einen Denkfehler drin...

16.09.2009 - 10:13 Uhr

Schau dir mal die Signature der AddDay methode an


DateTime AddDay(int days);

Daher ändert das AddDays an der aufrufenden Instanz rein gar nix. Stattdessen musst du


datumAnfang = datumAnfang.AddDays(j);

Auch den vergleich versteh ich nicht. Daher warum scheirbst du


datumAnfang.ToShortDateString() == datumEnde.ToShortDateString()

Da die Uhrzeit doch keine Rolle spielt ist doch das völlig ausreichend


datumAnfang == datumEnde

16.09.2009 - 10:08 Uhr

Ein Lösung wäre die so ein Teil selber zu bauen. Mit hilfe einer Textbox und einer Scrollbar. Like this


private void InitializeComponent()
{
    this.mainMenu1 = new System.Windows.Forms.MainMenu();
    this.textBox1 = new System.Windows.Forms.TextBox();
    this.vScrollBar1 = new System.Windows.Forms.VScrollBar();
    // 
    // textBox1
    // 
    this.textBox1.Font = new System.Drawing.Font("Tahoma", 18F, System.Drawing.FontStyle.Regular);
    this.textBox1.Location = new System.Drawing.Point(32, 40);
    this.textBox1.Size = new System.Drawing.Size(128, 44);
    this.textBox1.Text = "textBox1";
    // 
    // vScrollBar1
    // 
    this.vScrollBar1.Location = new System.Drawing.Point(160, 40);
    this.vScrollBar1.Maximum = 91;
    this.vScrollBar1.Size = new System.Drawing.Size(32, 36);
    this.vScrollBar1.ValueChanged += new System.EventHandler(this.vScrollBar1_ValueChanged);
    // 
    // Form1
    // 
    this.Controls.Add(this.vScrollBar1);
    this.Controls.Add(this.textBox1);
    this.Menu = this.mainMenu1;
    this.Text = "Form1";

}

private void vScrollBar1_ValueChanged(object sender, System.EventArgs e)
{
    this.textBox1.Text = this.vScrollBar1.Value.ToString();
}


16.09.2009 - 09:58 Uhr

Poste mal den Code für das Label.

[edit] steht ja schon oben, sry

16.09.2009 - 09:45 Uhr

@Trekki1990

Was willst du mir damit sagen?

Also Obere linke eckte muss doch doppelt negativ sein, -512, -384 oder seh ich da was falsch?

16.09.2009 - 09:33 Uhr

Das umrechnen ist doch nicht schwer! Ein paar Mathe Grundrechenarten und fertig.

Daher wenn du ein Punkt hast Bsp. (30, 40) und du willst den (0,0) Punkt in den Mittelpunkt schieben und wissen wo der (30, 40) jetzt liegt musst du doch nur


Point p = new Point(30 - this.Width / 2, 40 - this.Heigth / 2);

schreiben. War das wirklich so schwer oder hab ich dich einfach nur falsch verstanden?

16.09.2009 - 09:29 Uhr

Das beantwortet meine Frage nicht. Was passiert wenn du den Font des NumericUpDown Controls auf den von dir gewünschten setzt? Das es beim Label klappt spielt hierbei keine Rolle, ich möcht wissen was passiert wenn du es beim NUD Control äquivalent implementierst.

16.09.2009 - 09:25 Uhr

Hallo bonzy,

ich hab dir mal ne Lösung gepostet, die ist meines Erachtens nach gar nicht schwer ist daher leicht zu verstehen ist. Du hängst dich an das MouseClick Event und schaust welcher Button geclickt wurde. Danach überprüfst du ob der User ein TabPage (Reiter) gekickt hat. Ist dies der Fall dann öffnest du ein ContextMenu wobei du die Tabpage gleich mit an die TagProperty hängst. Danach musst du im OnClick des MenuItems nur noch die Tabpage removen. Und fertig!


public class ClickableTabControl : TabControl
{
    /// <summary>
    /// Raises the <see cref="E:System.Windows.Forms.Control.MouseClick"/> event.
    /// </summary>
    /// <param name="e">An <see cref="T:System.Windows.Forms.MouseEventArgs"/> that contains the event data.</param>
    protected override void OnMouseClick(MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            for (int i = 0; i < this.TabCount; i++)
            {
                if (TabPageClicked(e.Location, i))
                {
                    ContextMenu menu = new ContextMenu();
                    MenuItem item = new MenuItem("Close", new EventHandler(CloseClick));
                    item.Tag = this.TabPages[i];
                    menu.MenuItems.Add(item);
                    menu.Show(this, e.Location);
                }
            }
        }
        base.OnMouseClick(e);
    }

    /// <summary>
    /// Closes the tabpage the user specified.
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
    private void CloseClick(object sender, EventArgs e)
    {
        MenuItem item = sender as MenuItem;
        if (item != null)
        {
            TabPage page = item.Tag as TabPage;
            if (page != null)
            {
                this.TabPages.Remove(page);
            }
        }
    }

    /// <summary>
    /// Return true if the tabpage which with the given index was clicked.
    /// </summary>
    /// <param name="point">The point.</param>
    /// <param name="i">The i.</param>
    /// <returns></returns>
    private bool TabPageClicked(Point point, int i)
    {
        Rectangle rect = this.GetTabRect(i);
        
        return rect.Contains(point);
    }
}

15.09.2009 - 17:24 Uhr

Dein Problem kann ich nicht nachvollziehen. Man kann auf jeden Fall Controls per Designer hinzufügen und im nachhinein Controls per Code. Man darf dies nur nicht im Designer Code tun.

Und wenn du wie Herbivore bereits gesagt hat die Controls auch in die Groupbox einfügst dann sind die auch relativ zu Groupbox.


public Form1()
{
        InitializeComponent();
        InitializeControls();
}

public void InitializeControls()
{
    //here you can add what ever you want
}

public void InitializeComponent()
{
    //but not here
    ....
}

15.09.2009 - 17:18 Uhr

Das stimmt nicht ganz! Und zwar ist das OnColumnWidthChanging Event dafür da mitzubekommen wenn der User dabei ist die Breite zu ändern. Daher wenn du dort

e.Cancel = true;

schreibst, dann wird einfach nur nicht die neue breite gezeichnet. Wenn du nun noch das OnColumnWidthChanged Event abfängst kannst du dort einfach die Breite zurück setzen.


foreach (ColumnHeader column in listView.Columns)
{
    column.Tag = column.Width;
}


void listViewColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
{
    listView.Columns[e.ColumnIndex].Width = (int)listView.Columns[e.ColumnIndex].Tag;
}

void listViewColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
{
    e.Cancel = true;
}


So funktioniert es und ich find es sauberer, weil du nur dann die breite neu setzt wenn der User die Maus los lässt.

15.09.2009 - 16:44 Uhr

So find ich es akzeptabel. Ich fand nur die Lösung mit der MessageBox komisch. Jedesmal wenn der USer die Column Resizen will blobt eine MessageBox auf. In wie weit die Zeile

e.NewWidth = pingListView.Columns[e.ColumnIndex].Width;

nötig ist weiß ich nicht, weil doch eigentlich das e.cancel den Changing vorgang unterbindet.

15.09.2009 - 15:46 Uhr

Also mir kommt es vor als ob dir die Grundlagen fehlen. Du weist anscheinend nicht wie man mit Datenbanken umgeht, bzw was ein DataSet und Co. ist.
Dabei hat dir juetho alle nötigen Informationen gegeben. Die ignorierst du aber und versuchst die Arbeit auf uns abzuwelzen.

Wir helfen dir gern, aber du musst 1tens selber was dafür tun, und 2tens KONKRETE Fragen stellen, und nicht

aber ich weiß einfach nicht wie ich das programmieren muss

15.09.2009 - 15:43 Uhr

Noch mal kurz zu dem UseCompatibleTextRendering, das heißt wenn du den Font einach setzt mit


this.Font = new Font(...);

würd die neue Schrift nicht dargestellt weil zum Darstellen dieser Schrift dieses UseCompatibleTextRendering benötigt wird?

15.09.2009 - 15:19 Uhr

damit der Anwender sie nicht mehr verschieben kann

Gelöst würde ich das zwar nicht nennen aber so wird es auch verhindert. Nur schön finde ich das nicht.

15.09.2009 - 11:28 Uhr

Ich würde das Control ableiten und selber umbauen, also z.B. das OnPaint überschreiben. Dort kannst du dann selber die Zahlen zeichnen und die Digitale Schrift einsetzten.

15.09.2009 - 10:56 Uhr

Den Anfang habe ich dir doch schon gegeben. Die DB solltest du zuerst überdenken. Und dann selber mal bisschen was suchen....