R Read Ответов: 1

C# delegate problem передача данных между формами я получаю ошибку ' no overload for function matches delegate


I have 2 forms and am trying to pass data from one form to the sub form when I  open the sub form. I have setup a delegate function to do this. It works fine if say I pass a byte array, but if I try to pass a structure array I get the 'no overload for function matches delegate' error.

Main form:

public partial class Form1 : Form
    {
        public delegate void delConfigure(ref busDeviceType[] device);
        //public delegate void delConfigure(ref byte[] deviceMessages);
        ...........
        ...........
        public struct busDeviceType
        {
            public string  name;
            public UInt32 baudRate;
            public string file;
            public string format;
        }

        busDeviceType[] device;
        byte[] deviceMessages;

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

        private void setupToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Configure frm = new Configure();

            delConfigure del = new delConfigure(frm.FillListBox);
            del(ref this.device);
            //del(ref this.deviceMessages);

            frm.Show();
        }
        .......
        .......  
    }

Sub Form:

    public partial class Configure : Form
    {
        public struct busDeviceType
        {
            public string name;
            public UInt32 baudRate;
            public string file;
            public string format;
        }

        public Configure()
        {
                InitializeComponent();
        }

        
        public void FillListBox(ref busDeviceType[] d)
        //public void FillListBox(ref byte[] d)
        {
        ....
        }

    }


Что я уже пробовал:

Я попытался заменить структуру[] байтом [], и это работает (я закомментировал код со структурой и раскомментировал код byte [], который закомментирован в приведенном выше коде)

OriginalGriff

Ответ обновлен.

Richard Deeming

Вам не нужен делегат для вызова метода; просто вызовите метод напрямую:

Configure frm = new Configure();
frm.FillListBox(ref this.device);
frm.Show();

1 Ответов

Рейтинг:
9

OriginalGriff

Взгляните на определение понятия frm - вы не показываете нам определение, поэтому мы не можем сказать.
Но этот код компилируется чисто для меня:

        public delegate void delConfigure(ref busDeviceType[] device);
        public struct busDeviceType
            {
            public string name;
            public UInt32 baudRate;
            public string file;
            public string format;
            }

        public void FillListBox(ref busDeviceType[] d)
            {
            }

        private void MyButton_Click(object sender, EventArgs e)
            {
            delConfigure del = new delConfigure(FillListBox);
....
И все, что я сделал, это убрал frm ссылка.


Не обращай внимания: я заметил определение.
Проблема проста: у вас есть две идентичные структуры с одинаковым именем.
Измените эту строку:
public delegate void delConfigure(ref busDeviceType[] device);

До настоящего времени:
public delegate void delConfigure(ref Configure.busDeviceType[] device);
И удалите "локальную" версию структуры.