Не удается неявно преобразовать тип «объект» в «int».Существует явная ошибка преобразования - PullRequest
0 голосов
/ 04 июля 2019

Мой код показывает 5 ошибок.В ошибках говорится, что

Ошибка 1 Наилучший перегруженный метод соответствует для 'System.Windows.Forms.ComboBox.ObjectCollection.AddRange (object [])' с некоторыми недопустимыми аргументами

Ошибка 2 Аргумент1: невозможно преобразовать из «System.Array» в «object []»

Ошибка 3 Не удалось преобразовать группу методов «ReadExisting» в тип без делегата «float».Вы намеревались вызвать метод?

Ошибка 4 Не удается неявно преобразовать тип «объект» в «int».Существует явное преобразование (вам не хватает приведения?)

Ошибка 5 Не удается неявно преобразовать тип «объект» в «строку».Существует явное преобразование (вам не хватает приведения?)

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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private void Form2(object sender, EventArgs e)
        {
            this.CenterToParent();
            BtnCon.Enabled = false;
            BtnCon.BringToFront();

            BtnDiscon.Enabled = false;
            BtnDiscon.SendToBack();

            cmbBaud.SelectedItem = "9600";
        }

        private void BtnScanPort_Click(object sender, EventArgs e)
        {
            CmbPort.Items.Clear();
            Array myPort;
            int i;
            myPort = System.IO.Ports.SerialPort.GetPortNames();
            CmbPort.Items.AddRange(myPort);
            i = CmbPort.Items.Count;
            i = i - i;
            try
            {
                CmbPort.SelectedIndex = i;
            }
            catch (Exception ex)
            {
                DialogResult result;
                result = MessageBox.Show("com port not detected", "Warning !!!",                MessageBoxButtons.OK);
                CmbPort.Text = "";
                CmbPort.Items.Clear();
                Form2(this, e);
            }
            BtnCon.Enabled = true;
            BtnCon.BringToFront();
            CmbPort.DroppedDown = true;
        }

        private void cmbPort_SelectedIndexChanged(object sender, EventArgs e){}

        private void label2_Click(object sender, EventArgs e){}

        private void Timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                float i = serialPort1.ReadExisting;
                LblValue.Text = "Value : " + i.ToString();
            }
            catch (Exception ex){}
        }

        private void BtnCon_Click(object sender, EventArgs e)
        {
            BtnCon.Enabled = false;
            BtnCon.SendToBack();

            serialPort1.BaudRate = cmbBaud.SelectedItem;
            serialPort1.PortName = CmbPort.SelectedItem;
            serialPort1.Open();
            Timer1.Start();

            BtnDiscon.Enabled = true;
            BtnDiscon.BringToFront();
        }

        private void BtnDiscon_Click(object sender, EventArgs e)
        {
            BtnDiscon.Enabled = false;
            BtnDiscon.SendToBack();

            Timer1.Stop();
            serialPort1.Close();

            BtnCon.Enabled = true;
            BtnCon.BringToFront();
        }
    }
}

Необходимо исправить эти ошибки.

1 Ответ

0 голосов
/ 04 июля 2019

Первая ошибка из-за этого: Array myPort;. Это не то, как вы объявляете массив, Array - это абстрактный класс, который предоставляет методы для работы с массивами. SerialPort.GetPortNames() возвращает строковый массив, так что вы можете либо объявить строковый массив, либо просто удалить объявление Array myPort; и заменить другую строку на

var myPort = System.IO.Ports.SerialPort.GetPortNames();.

Следующая проблема с float i = serialPort1.ReadExisting;, это метод, поэтому вы должны вызывать его, т.е. serialPort1.ReadExisting(). Я думаю, что у метода есть возвращаемый тип строки, поэтому вам не нужно делать его плавающим, похоже, что вы все равно используете его как строку в следующей строке, поэтому i не обязательно должно быть плавать.

Другие ошибки заключаются в том, что вы пытаетесь назначить выбранный элемент комбинированного списка для значений типа int и string, но выбранный элемент является объектом, вы должны привести его к требуемому типу, например

serialPort1.BaudRate = (int)cmbBaud.SelectedItem;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...