Laden...

EventArgs spricht nicht an Visual Studio bringt eine Fehlermeldung

Erstellt von freakontour vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.711 Views
F
freakontour Themenstarter:in
15 Beiträge seit 2015
vor 8 Jahren
EventArgs spricht nicht an Visual Studio bringt eine Fehlermeldung

Hallo Gemeinde,
ich habe ein Problem ich wollte von der einen Form in die andere Form die Schrift mit einem Eventhandler übertragen doch er bringt mir dann die Fehlermeldung:
Fehler:CS7025 Inkonsistenter Zugriff: Ereignistyp "EventHandler<DataTransferEventArgs>" ist weniger zugreifbar als Ereignis "Optionen.DataTransfer".

Startform:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SearchTool
{
    public partial class Startseite : Form
    {
        public Startseite()
        {
            InitializeComponent();
        }

        private void einstellungenToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }
        Optionen frm = null;

        private void optionenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Das Fenster "Optionen"(Settings) wird geöffnet
            this.frm = new Optionen();
            this.frm.DataTransfer += frm_DataTransfer;
            this.frm.ShowDialog();
           
        }
        void frm_DataTransfer (object sender, DataTransferEventArgs e)
        {
            label1.Text += e.Data + "\r\n";
        }
}
}

Optionfenster:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SearchTool
{
    public partial class Optionen : Form
    {
        public Optionen()
        {
            InitializeComponent();
        }
        //*************************Variabeln*************
        string Schriftart;
        float Schriftgröße;
        Font Schrift;
        //**************************************************


        private void Optionen_Load(object sender, EventArgs e)
        {

        }
        public event EventHandler<DataTransferEventArgs> DataTransfer;

        public void button1_Click(object sender, EventArgs e)
        {
            FontDialog fd = new FontDialog();
            fd.MinSize = 10;
            fd.MaxSize = 35;
            fd.ShowDialog();
            Schrift = fd.Font;
            Schriftart = fd.Font.Name;
            Schriftgröße=fd.Font.Size;
            label1.Text = Schriftgröße + " " + Schriftart;

            var v = this.DataTransfer;
            if (v != null)
                v(this, new DataTransferEventArgs(label1.Text));

        }
    }
}

EventHandler:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SearchTool
{
    class DataTransferEventArgs : EventArgs
    {
        public DataTransferEventArgs(string data)//Konstruktor
        {
            this.Data = data;
        }
        public readonly string Data;//Durch readonly vor Veränderung schützen.
    }
}

Da ich noch Anfänger bin finde ich auf Teufel komm raus den Fehler nicht.
Bin für jeden Vorschlag offen

127 Beiträge seit 2015
vor 8 Jahren

Der Fehler steckt in der Zeile:

class DataTransferEventArgs : EventArgs

Korrekt heißt es

public class DataTransferEventArgs : EventArgs

Durch das (versehentliche) weglassen von "public" definierst du die Klasse als private und kannst sie damit nicht als event argument einer anderen public Klasse verwenden.

S
417 Beiträge seit 2008
vor 8 Jahren

Durch das (versehentliche) weglassen von "public" definierst du die Klasse als private und kannst sie damit nicht als event argument einer anderen public Klasse verwenden.

Als Korrektur/Ergänzung dazu: Die fehlende Angabe der Klassensichtbarkeit führt dazu, dass die Klasse internal und nicht private ist.
Elementdefinitionen ohne Sichtbarkeitsmodifikator innerhalb einer Klasse/Struct sind jedoch private.

127 Beiträge seit 2015
vor 8 Jahren

Durch das (versehentliche) weglassen von "public" definierst du die Klasse als private und kannst sie damit nicht als event argument einer anderen public Klasse verwenden.
Als Korrektur/Ergänzung dazu: Die fehlende Angabe der Klassensichtbarkeit führt dazu, dass die Klasse internal und nicht private ist.
Elementdefinitionen ohne Sichtbarkeitsmodifikator innerhalb einer Klasse/Struct sind jedoch private.

Danke für die Korrektur. Da war ich doch jahrelang in einem Irrglauben.
Nicht das es mich gestört hätte weil ich sowieso immer einen access modifier angebe 😉
Dennoch gut zu wissen.

F
freakontour Themenstarter:in
15 Beiträge seit 2015
vor 8 Jahren

Danke für die schnellen Antworten habt mir geholfen

Gruß Freakontour