簡體   English   中英

無法將類型“object”隱式轉換為“int”。 存在顯式轉換錯誤

[英]Cannot implicitly convert type 'object' to 'int'. An explicit conversion error exists

我的代碼顯示了 5 個錯誤。 錯誤說,

錯誤 1 ​​'System.Windows.Forms.ComboBox.ObjectCollection.AddRange(object[])' 的最佳重載方法匹配有一些無效參數

錯誤 2 參數 1:無法從“System.Array”轉換為“object[]”

錯誤 3 無法將方法組“ReadExisting”轉換為非委托類型“float”。 您是否打算調用該方法?

錯誤 4 無法將類型“object”隱式轉換為“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();
        }
    }
}

需要糾正這些錯誤。

第一個錯誤是因為這個: 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM