dipps
Goto Top

C Sharp Form übergreifend das Panel ändern

Hallo

ich habe ein Form1 mit Menü Band und einem panel1
Im panel1 werden meine Subforms geladen je nachdem was im Menü ausgewählt wird.

Nun habe ich im Subform (Dash.cs) ein dataGridView1 wenn ich ein Doppel klick mache möchte ich ein neues Subform im panel1 öffnen und einen Wert übergeben.
Dazu habe ich ein Subform erstellt detail.cs

detail.cs:
public partial class Detail : Form
    {
        public Detail(string Inventar)
        {
            inv = Inventar;
            InitializeComponent();
        }
        private string inv = "";  

        private void Detail_Load(object sender, EventArgs e)
        {
            label1.Text = inv;
        }
    }
Zum Öffnen nutze ich den Code
Form1.cs:
panel1.Controls.Clear();
            Detail objForm = new Detail("xx");  
            objForm.TopLevel = false;
            panel1.Controls.Add(objForm);
            objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            objForm.Dock = DockStyle.Fill;
            objForm.Show();

Wie kann ich das öffnen im panel1 im Dash.cs machen?
Sprich Dash.cs wird geschlossen und soll im panel1 Detail.cs öffnen.

Content-ID: 333437

Url: https://administrator.de/contentid/333437

Ausgedruckt am: 22.11.2024 um 13:11 Uhr

atze187
atze187 28.03.2017 aktualisiert um 16:18:26 Uhr
Goto Top
Der richtigere Weg wäre wohl dass "Dash" einen Event definiert und du dich in "Form1" dranhängst. Wird der Event ausgelöst entfernt "Form1" die Instanz von "Dash", lädt "Detail" mit den entsprechenden Parametern und fügt dies dann dem Panel hinzu.
Dipps
Dipps 30.03.2017 um 08:28:28 Uhr
Goto Top
Ich habe leider gerade nicht die Idee wie du das richtig meinst kannst du mir dazu ein kleines Beispiel nennen?
Ich danke dir aber schonmal für den Ansatz.
atze187
Lösung atze187 30.03.2017 um 09:32:32 Uhr
Goto Top
So in etwa. In kurz:

  1. Dash.cs definiert Event "SelectionChanged " mit dem DashItemEventArgs
  2. Form1 hängt sich an den Event
  3. Event wird ausgelöst wenn im dataGridView1 eine Zeile ausgewählt wird
  4. Dash wird entfernt
  5. Details wird hinzugefügt

Dash.cs:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Dash : Form
    {
        public Dash()
        {
            InitializeComponent();

            dataGridView1.SelectionChanged += DataGridView1_SelectionChanged;
        }

        private void DataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            var dgw = (DataGridView) sender;

            if (dgw.SelectedRows.Count == 1)
            {
                // in der nächsten Zeile die ID aus dem GridView holen
                var id = 1;
                OnDashItemSelected(1);
            }
        }

        public event EventHandler<DashItemEventArgs> DashItemSelected;

        protected virtual void OnDashItemSelected(long id)
        {
            DashItemSelected?.Invoke(this, new DashItemEventArgs(id));
        }
    }

    public class DashItemEventArgs:EventArgs
    {
        public long Id { get; }

        public DashItemEventArgs(long id)
        {
            Id = id;
        }
    }
}

Form1.cs

using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private Dash dash = null;

        public Form1()
        {
            InitializeComponent();
            dash = new Dash();

            // Dash anzeigen

            dash.DashItemSelected += _currentDash_DashItemSelected;
        }

        private void _currentDash_DashItemSelected(object sender, DashItemEventArgs e)
        {
            this.Controls.Remove((Control)sender);
            var details = new Details(e.Id);
            // details anzeigen

        }
    }
}