Autor Beitrag
Kasko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126
Erhaltene Danke: 1

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Mi 30.05.18 22:11 
Hey

Weiß jemand, warum diese Steuerelemente nicht auf dem Formular angezeigt werden? Wenn ich die Steuerelemente über den Entwurf hinzufüge und der Algorithmus die Eigenschaften in die InitialiseComponents Methode schreibt funktioniert alles super. Aber wenn ich den gleichen Code vom Designer im Formularkonstruktor mit nur anderen Namen verwende, werden die Labels nicht angezeigt.
Hier der Code:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
private void CreatePlayingTab()
    {
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));

        // 
        // bunifuCustomLabel_Titel
        // 
        BunifuCustomLabel bunifuCustomLabel_Titel = new BunifuCustomLabel();
        bunifuCustomLabel_Titel.AutoSize = true;
        bunifuCustomLabel_Titel.Font = new Font("Century Gothic"11.25F, FontStyle.Bold, GraphicsUnit.Point, 0);
        bunifuCustomLabel_Titel.ForeColor = Color.FromArgb(224224224);
        bunifuCustomLabel_Titel.Location = new Point(1930);
        bunifuCustomLabel_Titel.Name = "bunifuCustomLabel_Titel";
        bunifuCustomLabel_Titel.Size = new Size(15318);
        bunifuCustomLabel_Titel.Text = "#001 Wer ist Naruto?";

        // 
        // bunifuCustomLabel_Interpret
        // 
        BunifuCustomLabel bunifuCustomLabel_Interpret = new BunifuCustomLabel();
        bunifuCustomLabel_Interpret.AutoSize = true;
        bunifuCustomLabel_Interpret.Font = new Font("Century Gothic"11.25F, FontStyle.Regular, GraphicsUnit.Point, 0);
        bunifuCustomLabel_Interpret.ForeColor = Color.FromArgb(224224224);
        bunifuCustomLabel_Interpret.Location = new Point(2052);
        bunifuCustomLabel_Interpret.Name = "bunifuCustomLabel_Interpret";
        bunifuCustomLabel_Interpret.Size = new Size(9820);
        bunifuCustomLabel_Interpret.Text = "Studio Tokyo";

        // 
        // windowsMediaPlayer
        // 
        AxWindowsMediaPlayer windowsMediaPlayer = new AxWindowsMediaPlayer();
        windowsMediaPlayer.Dock = DockStyle.Bottom;
        windowsMediaPlayer.Enabled = true;
        windowsMediaPlayer.Location = new Point(0117);
        windowsMediaPlayer.Name = "windowsMediaPlayer";
        windowsMediaPlayer.OcxState = ((AxHost.State)(resources.GetObject("mediaPlayer.OcxState")));
        windowsMediaPlayer.Size = new Size(912513);
        windowsMediaPlayer.uiMode = "None";

        // 
        // panel_currentlyPlaying
        //
        Panel panel_currentlyPlaying = new Panel();
        panel_currentlyPlaying.Controls.Add(windowsMediaPlayer);
        panel_currentlyPlaying.Controls.Add(bunifuCustomLabel_Titel);
        panel_currentlyPlaying.Controls.Add(bunifuCustomLabel_Interpret);
        panel_currentlyPlaying.Dock = DockStyle.Fill;
        panel_currentlyPlaying.Location = new Point(0100);
        panel_currentlyPlaying.Name = "panel_Playing";
        panel_currentlyPlaying.Size = new Size(912630);

        panel_Media.Controls.Add(panel_currentlyPlaying);
    }


panel_Media ist dabei ein Panel welches dem Formular via Entwurf hinzugefügt wurde also sich bereits auf dem Formular befindet.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 31.05.18 00:19 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Kasko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126
Erhaltene Danke: 1

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Do 31.05.18 00:57 
Wie ich schon versucht habe zu erläutern, habe ich panel_Media via Entwurf dem Formular hinzugefügt. Die Eigenschaften dieses Panels werden durch den Algorithmus automatisch in die InitialiseComponents Methode geschrieben. Dort steht dann unter anderem folgendes:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
// 
// panel_Media
// 
this.panel_Media.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(31)))), ((int)(((byte)(31)))), ((int)(((byte)(31)))));
this.panel_Media.Controls.Add(this.panel_DragControl);
this.panel_Media.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel_Media.Location = new System.Drawing.Point(3680);
this.panel_Media.Name = "panel_Media";
this.panel_Media.Size = new System.Drawing.Size(912730);
this.panel_Media.TabIndex = 3;

///
/// Form1
///
[...]
this.Controls.Add(this.panel_Media);
this.Controls.Add(this.panel_Lists);
this.Controls.Add(this.panel_Layout);
this.Controls.Add(this.panel_ToolButtons);
[...]


panel_Media ist also sehr wohl auf dem Formular vorhanden und auch richtig positioniert. Zudem spiele ich nicht im Designer rum ;) sondern möchte panel_currentlyPlaying, etc. nicht per Entwurf hinzufügen (aus Gründen der Übersicht sowohl in Entwurf als auch im Code) sondern via eigenem Code erstellen, platzieren und zuordnen. Der in der Frage gepostete Code befindet sich nicht im Designer sondern in einer Methode der (noch) Form1-Klasse, welche nach InitialiseComponents aufgerufen wird. Ich habe lediglich erwähnt, dass es sich theoretisch um den selben Code handelt wie im Designer, wenn ich mit dem Entwurf arbeite. So habe ich die exakten Daten übernommen, sodass es auch identisch aussieht. Ich schreibe also nicht im Designer herum ;). Zudem ist etwas zu sehen, nämlich das Panel panel_currentlyPlaying (nur wenn man es färbt sonst gleichfarbig mit Hintergrund --> "unsichtbar") und der AxWindowsMediaPlayer windowsMediaPlayer. Lediglich die Labels sind nicht zu sehen obwohl sie mit Text versehen wurden, welcher sich mit einer Farbe von 224, 224, 224 vom Hintergrund mit 31, 31, 31 abheben sollte. Durch Einzelschrittdebugging habe ich auch sichergestellt, dass die Eigenschaften korrekt zugewiesen werden.

Hoffe das hat einige Missverständnisse geklärt und hoffe, dass es einigen von euch die Erleutung gebracht hat und ihr diese mit mir teilen könntet, denn ich weiß beim besten Willen nicht warum die nicht angezeigt werden.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 31.05.18 08:06 
Hallo,

siehst du denn die Labels, wenn du den MediaPlayer mal temporär nicht zum Panel hinzufügst?
Die Eigenschaften Dock und Location widersprechen sich.
Kasko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126
Erhaltene Danke: 1

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Do 31.05.18 15:49 
Nein ich sehe die Labels nicht.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 31.05.18 18:31 
Wenn es da irgendwo ein Problem gibt nicht in dem Teil den du zeigst. Mir geht auch gerade die Vorstellung ab welchen typischen Fehler man da gemacht haben könnte.
Ich würde dir empfehlen den gezeigten Code mal in ein neues Projekt zu kopieren und zu schauen ob es funktioniert oder nicht.Wenn du nur das kopierst was du hier gezeigt hast und die paar Vorbereitung triffst damit das funktioniert wird es mit annähernd 100% Wahrscheinlichkeit dort dann auch funktionieren. Wenn nicht schau dir in deinem Orginalprojekt an was du sonst noch angestellt hast, übernimm diese Teil in dein Testprojekt und beobachte wann diese Form aufhört so zu funktionieren wir von dir erwartet.
Kasko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126
Erhaltene Danke: 1

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Do 31.05.18 20:26 
Ich habe den Quellcode nun in ein komplett neues Projekt kopiert und zusätzlich nur panel_Media und panel_DragControl, welches sich in panel_Media über panel_currentlyPlaying befindet (Dock = DockStyle.Top). Ich habe das Formular auf eine Größe von 912x730 gebracht, sodass alles die identischen Maße/Größen und auch die selben Eigenschaften hat. Ich nichts weiter hinzugefügt. Die Form1 Klasse sieht also wie folgt aus:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
using System.Drawing;
using System.Windows.Forms;
using Bunifu.Framework.UI;
using AxWMPLib;

namespace TestProject
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CreatePlayingTab();
        }

        private void CreatePlayingTab()
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));

            // 
            // bunifuCustomLabel_Titel
            // 
            BunifuCustomLabel bunifuCustomLabel_Titel = new BunifuCustomLabel();
            bunifuCustomLabel_Titel.AutoSize = true;
            bunifuCustomLabel_Titel.Font = new Font("Century Gothic"11.25F, FontStyle.Bold, GraphicsUnit.Point, 0);
            bunifuCustomLabel_Titel.ForeColor = Color.FromArgb(224224224);
            bunifuCustomLabel_Titel.Location = new Point(1930);
            bunifuCustomLabel_Titel.Name = "bunifuCustomLabel_Titel";
            bunifuCustomLabel_Titel.Size = new Size(15318);
            bunifuCustomLabel_Titel.Text = "#001 Wer ist Naruto?";

            // 
            // bunifuCustomLabel_Interpret
            // 
            BunifuCustomLabel bunifuCustomLabel_Interpret = new BunifuCustomLabel();
            bunifuCustomLabel_Interpret.AutoSize = true;
            bunifuCustomLabel_Interpret.Font = new Font("Century Gothic"11.25F, FontStyle.Regular, GraphicsUnit.Point, 0);
            bunifuCustomLabel_Interpret.ForeColor = Color.FromArgb(224224224);
            bunifuCustomLabel_Interpret.Location = new Point(2052);
            bunifuCustomLabel_Interpret.Name = "bunifuCustomLabel_Interpret";
            bunifuCustomLabel_Interpret.Size = new Size(9820);
            bunifuCustomLabel_Interpret.Text = "Studio Tokyo";

            // 
            // windowsMediaPlayer
            // 
            AxWindowsMediaPlayer windowsMediaPlayer = new AxWindowsMediaPlayer();
            windowsMediaPlayer.Dock = DockStyle.Bottom;
            windowsMediaPlayer.Enabled = true;
            windowsMediaPlayer.Location = new Point(0117);
            windowsMediaPlayer.Name = "windowsMediaPlayer";
            windowsMediaPlayer.OcxState = ((AxHost.State)(resources.GetObject("mediaPlayer.OcxState")));
            windowsMediaPlayer.Size = new Size(912513);

            // 
            // panel_currentlyPlaying
            //
            Panel panel_currentlyPlaying = new Panel();
            panel_currentlyPlaying.Controls.Add(windowsMediaPlayer);
            panel_currentlyPlaying.Controls.Add(bunifuCustomLabel_Titel);
            panel_currentlyPlaying.Controls.Add(bunifuCustomLabel_Interpret);
            panel_currentlyPlaying.Dock = DockStyle.Fill;
            panel_currentlyPlaying.Location = new Point(0100);
            panel_currentlyPlaying.Name = "panel_Playing";
            panel_currentlyPlaying.Size = new Size(912630);

            panel_Media.Controls.Add(panel_currentlyPlaying);
        }
    }
}


Ich habe zusätzlich die Zeile: windowsMediaPlayer.uiMode = "None" gelöscht weil diese genau wie im Orginalprojekt eine System.Windows.Forms.AxHost.InvalidActiveXStateException auswirft, was ein weiteres meiner Probleme ist :(.

Das Endergebnis ist, dass die Labels nicht angezeigt werden :(. Dies liegt auch nicht daran, dass es mit der Klasse BunifuCustomLabel irgendwelche Porbleme gibt wie Sperre der Zugänglichkeit aufgrund des Ablaufens einer trial(meine ist nicht abgelaufen). Auch mit einem ganz normalen Label funktioniert es nicht. Wenn ihr wollte kann ich auch noch die Designer.cs posten (sind auch nur gut 90 Zeilen), da dies der einzig andere Code im Projekt ist. Möchte aber nicht spamen, deshalb lasse ich es erstmal.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 31.05.18 21:02 
Ändere dein Testprojekt so das es weder den Mediaplayer noch deine Bunifu Komponente braucht, also so das es keine externen Abhängigkeiten hat. Anschließend zippe das ganze Projekt (ohne den bin und obj Ordner) und hänge das ganze hier an. Das macht es uns sehr einfach dir zu helfen. Und nebenbei umgekehrt macht so ein Testprojekt dir es sehr einfach Hilfe zu finden ;)
Kasko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126
Erhaltene Danke: 1

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Do 31.05.18 21:31 
So ich habe alle Abhängigkeiten die nicht standardmäßig von Beginn an vorhanden sind entfernt und den Code von diesen Elementen befreit.
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 31.05.18 22:50 
panel_DragControl liegt auch auf dem panel_Media und überdeckt deine hinzugefügten Label. Die sind da nur halt dahinter.
Vermutlich wolltest du panel_DragControl neben dem panel_Main haben (dann machen deine Docking Einstellungen Sinn).

Am einfachsten siehst du das Problem wenn du in Visual Studio den Document Outline einblendest (CTRL+ALT+T).
Das Document Outline zeigst dir die Control Schachtelung in einer baumartigen Struktur. Da fällt das sofort auf das der Parent von panel_DragControl das panel_Media ist und nicht die Form.
Kasko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126
Erhaltene Danke: 1

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Do 31.05.18 23:25 
Das ist beabsichtigt das panel_DragControl ein Child von panel_Media ist. Wenn das nicht der Fall wäre würde panel_DragControl wirklich über panel_Media liegen und durch die Dock=Fill-Eigenschaft von panel_currentlyPlaying würde dann das gesamte panel_Media ausgefüllt werden und panel_DragControl würde wirklich etwas verdecken.

Da aber sowohl panel_currentlyPlaying als auch panel_DragControl Child-Objekte von panel_Media sind, dockt panel_DragControl an der gesamten oberen Kante von panel_Media mit einer Höhe von 100 und den Rest füllt panel_currenlyPlaying aus mit Dock=Fill. Dadurch fängt panel_currentlyPlaying erst bei einem lokalem y-Wert von 100 im panel_Media an also unter panel_DragControl. Dadurch kann panel_DragControl nichts verdecken da es nicht auf panel_Media und demnach auch auf panel_currentlyPlaying draufliegt sondern in panel_Media drin und oberhalb von panel_currentlyPlaying liegt.

Das Problem weshalb die Labels nicht angezeigt werden liegt darin, dass sie außerhalb des Bereiches von panel_currentlyPlaying liegen und ihre lokalen Location-Werte sich aber an dem Ursprung von panel_Media orientieren und nicht an panel_currentlyPlaying welches ja eigentlich das direkte parent-Objekt ist. Wenn man panel_DragControl mit Hide oder Visible = false ausblendet wird kein Verdecken durch panel_DragControl verhindert sondern dadurch, dass panel_DragControl nicht angezeigt wird, füllt durch Dock=Fill das panel_currentlyPlaying nun das gesamte panel_Media aus und schiebt sich unter anderem in den Bereich der y-Werte hinein in dem die Labels liegen (ca. 30 <= y < 70). Dadurch können die Labels nun angezeigt werden.

Die Frage ist: Wie sorge ich dafür, dass sich die Labels am Ursprung von panel_currentlyPlaying und nicht am Ursprung von panel_Media orientieren?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 01.06.18 10:22 
Es fehlt noch eine Zeile:
ausblenden C#-Quelltext
1:
panel_currentlyPlaying.BringToFront();					
(nach panel_Media.Controls.Add(panel_currentlyPlaying)!)

Durch die Z-Order wird die interne Reihenfolge der Elemente eines Containers festgelegt und damit deren Sichtbarkeit (Das Element mit Dock.Fill sollte immer das oberste Element sein).
In deinem bisherigen Code war die Location trotz (scheinbar) explizitem Setzen auf (0, 100) weiterhin (0, 0), so daß die Labels nicht sichtbar wurden (daher ist auch das Setzen der Location hier überflüssig, wie ich ja schon weiter oben schrieb).

Für diesen Beitrag haben gedankt: Kasko
Kasko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126
Erhaltene Danke: 1

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Fr 01.06.18 12:24 
Super das ist es ;) Vielen Dank. Jetzt hab ich nur noch das Problem mit der System.Windows.Forms.AxHost.InvalidActiveXStateException bei windowsMediaPlayer.uiMode = "None";. Gehört zwar eigentlich nicht zum Thema dieses Threads aber vielleicht habt ihr das ja trotzdem ne Idee oder überhaupt erstmal Lust zu antworten
Kasko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126
Erhaltene Danke: 1

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Fr 01.06.18 12:36 
Okay dieses Problem konnte ich selbst lösen :lol: Ich durfte es nur nicht im Konstruktor setzen

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void Form1_Load(object sender, EventArgs e)
{
    AxWindowsMediaPlayer mediaPlayer = panel_Media.Controls.Find("windowsMediaPlayer"true)[0as AxWindowsMediaPlayer;
    mediaPlayer.uiMode = "None";
}