Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Camouflagezebra
Thema: [GELÖST]Label auf Canvas drehen
Am im Forum: GUI: WPF und XAML

Mache ich es so falsch?


<Measure> 
       <Left>239</Left> 
       <Top>152</Top> 
       <Content><String xmlns="clr-namespace:System;assembly=mscorlib">122</String></Content> 
</Measure>

Left und Top sind für die Koordinaten.



Edit:

talla, danke für die Hilfe!

Ich habe das Problem in 2 Zeilen lösen können.


RotateTransform rotate = new RotateTransform(270);
label.RenderTransform = rotate;

Der einzige Schönheitsfehler den es jetzt noch geben würde, ist dass es sich um die 0,0-Koordinate des Labels dreht.

Wie kann ich sie um den Mittelpunkt des Labels drehen? (Mittelpunkt ist bei jedem Label durch Schriftgröße und Zeichenkette verschieden)

So geht es nicht:


RotateTransform roate = new RotateTransform(270, label.Width / 2, label.Height / 2);



Edit2:

Problem komplett gelöst!


RotateTransform rotate = new RotateTransform(270);
label.RenderTransformOrigin = new Point(0.5, 0.5);
label.RenderTransform = rotate;

Mithilfe von RenderTransformOrigin kann der Mittelpunkt eines Elementes für die Drehung gefunden werden.
Der Point muss für X und Y einen Wert zwischen 0 und 1 haben (Demnach ist 0.5 genau die Hälfte)

Kann geclosed werden. Danke nochmal für die Hilfe, talla :)

Thema: [GELÖST]Label auf Canvas drehen
Am im Forum: GUI: WPF und XAML

Hallo,

Ich würde gerne ein Label auf meinem Canvas drehen, jedoch weiß ich nicht wie.

Im Internet habe ich nur Beschreibungen gefunden, bei denen ich es explizit in ein Graphic umwandeln muss, was für mich aber nicht gerade vorteilhaft wird, da meine Labels später in XML gespeichert werden und sie deshalb Labels bleiben sollten.

Kann man das auf einer Canvas nicht irgendwie anders drehen?
Freue mich über jede Hilfe!

mfg
zebra

Thema: Unscharfe Darstellung von ContentControl auf Canvas
Am im Forum: GUI: WPF und XAML

Hallo,

Ich möchte auf einem Canvas Etiketten darstellen können, habe jedoch Probleme mit der Darstellung.

Die Etiketten werden als String angegeben, der von der Geometry-Klasse(System.Windows.Media.Geometry) geparst wird, damit am Ende ein Path(System.Windows.Shapes.Path) rauskommt.
Beispielsweise 2*2 Etiketten mit den Maßen 40*30:
M0,0 H40 V40 H0 Z M40,0 H80 V40 H40 Z M0,40 H40 V80 H0 Z M40,40 H80 V80 H40 Z

Im Anschluss habe ich den Path dann als Content für ein ContentControl-Objekt gesetzt und dieses dann dem Canvas hinzugefügt.

Blödeweiße wird das erzeugte Bild bei größeren Etikettblöcken immer unschärfer zur Mitte hin (Im Anhang ein Screenshot dazu).

Wie kann ich das vermeiden?

Hier noch den Code für die Erstellung des ContentControl/Path


                Path label = new Path();
                ContentControl cc = new ContentControl();
                label.Stroke = Brushes.Black;
                label.StrokeThickness = 1;
                label.SnapsToDevicePixels = true;
                label.Stretch = Stretch.Fill;
                label.StrokeLineJoin = PenLineJoin.Miter;
                label.Data = Geometry.Parse(getGeometry()); // <---- getGeometry() stellt den String bereit, den ich schon im obrigen Beispiel angeführt habe 
                label.Fill = Brushes.Transparent;
                cc.SnapsToDevicePixels = true;
                cc.Width = label.Data.Bounds.Width;
                cc.Height = label.Data.Bounds.Height;
                cc.Content = label;



Im Sceenshot habe ich mal einen solchen Etiketten-Block auf die Canvas gezeichnet und mit der Bildschirmlupe rangezoomt.

greetz
Zebra

Thema: Event aus ResourceDictionary
Am im Forum: GUI: WPF und XAML

Hallo,

Ich habe einen Button in einem ResourceDictionary, das in mein MainWindow-XAML eingebunden ist.

Nun möchte ich eine Click-Event für diesen Button erstellen das im CodeBehind des MainWindow ausgeführt werden soll.


<ResourceDictionary 
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:s="clr-namespace:label">

    <Grid x:Key="MyLabelEditor" Margin="0,5,0,5">
<!-- ... -->
        <TextBox Grid.Row="9" Grid.Column="0" Grid.ColumnSpan="2" Margin="4,0,10,0" Text="{Binding Path=labelName, Mode=TwoWay}"/>

        <Button Name="btnCreate" Content="Erstellen" Grid.Row="10" Grid.Column="1" Margin="4,10,10,0" Click="btnCreateClick"/>

    </Grid>

</ResourceDictionary>   


  public partial class MainWindow : Window
    {
        private LabelBlock lb = new LabelBlock();

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = lb;               
        }

        private void btnCreateClick(object sender, RoutedEventArgs e)
        {
// ...
        }
    }

Wenn ich es so versuche kommt mir folgende Fehlermeldung:
Für das Stammelement "ResourceDictionary" ist ein x:Class-Attribut erforderlich, damit Ereignishandler in der XAML-Datei unterstützt werden. Entfernen Sie entweder den Ereignishandler für das Click-Ereignis, oder fügen Sie dem Stammelement ein x:Class-Attribut hinzu.

Mir ist klar dass er ein CodeBehind für das ResourceDictionary will, aber dass will ich nicht ;)

Komischerweise kann ich aus dem gleichen RD ein Binding erstellen das den DataContext des MainWindow betrifft.

Kann ich auf einfache weiße das Event im CodeBehind des MainWindow auslösen?
bzw. Muss ich dafür wirklich ein RoutedCommand im MainWindow erstellen oder gibts da eine andere Lösung?
Unter Umständen muss ich noch ziemlich viele Buttons erstellen und ich will nicht jedes mal über RoutedCommand und CommandBindings lösen müssen.

greetz
zebra

Thema: Dynamischer Fragenkatalog: Wie das Datenmodell aufbauen?
Am im Forum: Rund um die Programmierung

Hallo wackelkontakt

Ich habe etwas ähnliches vor ungefähr einem Jahr programmiert. (Hierachische Gliederung von Zugriffsberechtigungen)

Ich bin dabei genau so vorgegangen wie es T-Virus erklärt hat. Mithilfe von Rekursion hat sich das Problem wunderbar lösen lassen.

Thema: [gelöst] GroupBox sauber aus Form löschen
Am im Forum: GUI: Windows-Forms

Vielen Dank für eure Hilfe.

Ich habe beide Lösungsvorschläge getestet:

- Die Lösung von Lennart funktioniert einwandfrei.
- Die Lösung von wcseller hat das gleiche Problem wie meine Eigene.

greetz
Zebra

Thema: [gelöst] GroupBox sauber aus Form löschen
Am im Forum: GUI: Windows-Forms

Hallo Community,

ich hab zZ ein scheinbar leicht zu lösendes Problem, dass ich aber einfach nicht zu bewältigen schaffe:

Ich möchte alle GroupBoxes aus einem Fenster löschen:


            foreach (Control c in Controls)
            {
                if (object.ReferenceEquals(c.GetType(), typeof(GroupBox)))
                {
                    c.Hide();
                    c.Dispose();
                }
            }

Diese Vorgehensweise funktioniert leider nur so halb.
Sie wird ausgeführt, wenn ich auf einen Button klicke, jedoch muss ich 4-5 auf den Button klicken, bis wirklich alle Textboxen verschwinden :/

Wie kann ich das Problem komplett löschen?

greetz
Zebra

Thema: [GELÖST] [C#] Erstelltes Excel-File während der Laufzeit manuell im Explorer öffnen
Am im Forum: Office-Technologien

Ja, der Excel-Prozess schließt sich nicht.

Wie muss ich das Excel-Object in den using-Block setzen?
Ich kenn mich mit C# leider nicht so aus :(

Ich bekomme folgende Fehlermeldung:

"Microsoft.Office.Interop.Excel.Application": Der in einer using-Anweisung verwendete Typ muss implizit in System.IDisposable konvertiert werden können.

EDIT:
Ich habe das Problem gelöst, in dem ich nach dem erstellen der Excel-Datein das Programm neu starte (ist eine Sache von einer Sekunde, da das Programm nicht groß ist)

Application.Restart();

Thema: [GELÖST] [C#] Erstelltes Excel-File während der Laufzeit manuell im Explorer öffnen
Am im Forum: Office-Technologien

Hallo Community,

Ich habe folgendes Problem:

Mein Programm erstellt während seiner Laufzeit ein Excel-File. Funktioniert wunderbar.

Jedoch kann ich das Excel-File nicht selber öffnen, während noch das Programm läuft.


            // Variablen deklarieren 
            Excel.Application myExcelApplication;
            Excel.Workbook myExcelWorkbook;
            Excel.Worksheet myExcelWorkSheet;
            myExcelApplication = null;
            try
            {
                // Excel Prozess initialisieren
                myExcelApplication = new Excel.Application();
                myExcelApplication.Visible = false;
                myExcelApplication.ScreenUpdating = false;

                // Excel Datei anlegen: Workbook
                var myCount = myExcelApplication.Workbooks.Count;
                myExcelWorkbook = (Excel.Workbook)(myExcelApplication.Workbooks.Add(System.Reflection.Missing.Value));
                myExcelWorkSheet = (Excel.Worksheet)myExcelWorkbook.ActiveSheet;

                //Nun wird das Excel-File mit Daten befüllt
                //...

                myExcelWorkbook.Close(true, report_path + "report.xlsx", System.Reflection.Missing.Value);

            }
            catch (Exception ex)
            {
                String myErrorString = ex.Message;
                MessageBox.Show(myErrorString);
            }
            finally
            {
                // Excel beenden 
                if (myExcelApplication != null)
                {
                   myExcelApplication.Quit();
                   System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcelApplication);
                }
            }

Das Excel-File lässt sich erst öffnen, wenn mein Programm geschlossen wurde.
Wenn ich es öffne, während mein Programm noch läuft, wird zwar Excel gestartet, jedoch wird das Excel-File nicht geöffnet.

Habe ich vergessen irgend eine Verbindung zwischen dem Programm und dem Excel-File zu trennen? Falls ja, welche?^^

greetz
Zebra

Thema: Variablennamen zur Laufzeit zusammensetzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Community,

ich hoffe, dass ich mein Problem im Titel ausgedrückt habe.

Mein Problem ist folgendes:

Ich habe eine Ansammlung von Textboxen (test1, test2, test3, test4 usw.)

Nun möchte ich mittels einer einziger Methode auf die Textboxen zugreifen können, jedoch bekomme ich das nicht ganz auf die Reihe.

Meine bisherige Idee war es, eine neue Textbox zu machen und ihr einfach den Namen meiner Textbox zu geben, in die ich hineinschreiben will.

Klappt jedoch leider nicht :(



public void write (int i) {

          Control ctrl = new TextBox();
          ctrl.Name = "test" + i;
          ctrl.Text = "blub";

}

Könnt ihr mir helfen?

MfG
Zebra