如何在C#中使用combobox发送命令

时间:2015-07-21 15:08:55

标签: c# combobox listbox

我编写了一个代码,使用超链接点击事件将命令发送到串行设备。因为我不断添加越来越多的超链接,我想通过制作所有命令选项的下拉列表来简化应用程序,以便在单击特定的一个时,事件会在串行端口向下触发该特定命令单击链接时的操作方式。我不知道如何设置它,所以如果我能看到一个例子,我将不胜感激。下面是单击链接时我的代码示例,我希望能够执行此操作,但是从下拉列表中选择后。

 private void linkLabel_HC1_101_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                var content = new List<byte>();
                content.Add(2);
                content.AddRange(Encoding.ASCII.GetBytes("01P00101##"));
                content.Add(3);
                byte[] buffer = content.ToArray();
                serialPort1.Write(buffer, 0, buffer.Length);
            }
        }

        private void HC2_101_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                var content = new List<byte>();
                content.Add(2);
                content.AddRange(Encoding.ASCII.GetBytes("02P00101##"));
                content.Add(3);
                byte[] buffer = content.ToArray();
                serialPort1.Write(buffer, 0, buffer.Length);
            }
        }

3 个答案:

答案 0 :(得分:0)

如果您想要简单,请使用静态字符串值创建下拉列表。如果字符串是你发送的字符串,那就太容易了。 我们假设您的下拉列表名为enqueue initial board while queue not empty: dequeue a board if board is already examined: //std::set search continue put board in examined boards if board is solved: print solution else: for each possible board that can arise out of this one: add board to end of queue

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places"></script>
<script type="text/javascript">
    function LoadGoogleMAP() {

        //Gets value of latitude and longitude of the search location from txtLatitude and txtLongitude textboxes. 
        var lat = document.getElementById('<%=txtLatitude.ClientID%>').value;
        var lon = document.getElementById('<%=txtLongitude.ClientID%>').value;
        var myLatlng = new google.maps.LatLng(lat, lon)

        var markers = [];
        var mapOptions = {
                center: myLatlng,
                zoom: 14,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                marker: true
        };

        var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

        // Create the search box and link it to the UI element.  
        var input = (document.getElementById('MainContent_txtSearch'));
        map.controls[google.maps.ControlPosition.CENTER].push(input);

        var searchBox = new google.maps.places.SearchBox((input));

        // Listen for the event fired when the user selects an item from the  
        // pick list. Retrieve the matching places for that item.  
        google.maps.event.addListener(searchBox, 'places_changed', function () {
            var places = searchBox.getPlaces();

            if (places.length == 0) {
                return;
            }

            for (var i = 0, marker; marker = markers[i]; i++) {
                marker.setMap(null);
            }

            // For each place, get the icon, place name, and location.  
            markers = [];
            var bounds = new google.maps.LatLngBounds();
            for (var i = 0, place; place = places[i]; i++) {
                var image = {
                    url: place.icon,
                    size: new google.maps.Size(71, 71),
                    origin: new google.maps.Point(0, 0),
                    anchor: new google.maps.Point(17, 34),
                    scaledSize: new google.maps.Size(25, 25)
                };

                // Create a marker for each place.  
                var marker = new google.maps.Marker({
                    map: map,
                    icon: image,
                    title: place.name,
                    position: place.geometry.location
                });

                markers.push(marker);

                bounds.extend(place.geometry.location);
            }

            map.fitBounds(bounds);
            map.setZoom(15);
            
        });
        
        // current map's viewport.  
        google.maps.event.addListener(map, 'bounds_changed', function () {
            var bounds = map.getBounds();
            searchBox.setBounds(bounds);
        });
    }
</script>

否则,如果您希望文本不同,可以在下拉文本上进行切换。

listbox

您还可以执行与列表框中的文本配对的值的下拉列表。如果需要,您可以在设计器中静态创建此配对,然后使用该值将该字符串保存为您想要添加为此类型的范围

content.AddRange(Encoding.ASCII.GetBytes(this.listbox.Text));

答案 1 :(得分:0)

您可以使用ComboBox的SelectedIndexChange事件

e.g。

private void InitComboBox()
{
  comboBox1.Items.Add("Command1");
  comboBox1.Items.Add("Command2");
  comboBox1.Items.Add("Command3");
  comboBox1.Items.Add("Command4");
  comboBox1.Items.Add("Command5");
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  if (comboBox1.SelectedItem.ToString().Equals("Command1"))
  {
    //Excute Command here
  }
  //...
}

答案 2 :(得分:0)

在您的ComboBox中,您可能希望显示用户友好的文本,而不是您要发送的字节。创建一个具有两个字符串属性的类:

public class Command
{
    public string DisplayText { get; set; }
    public string CommandText { get; set; }

    public Send(SerialPort serialPort)
    {
        if (serialPort.IsOpen) {
            var content = new List<byte>();
            content.Add(2);
            content.AddRange(Encoding.ASCII.GetBytes(CommandText));
            content.Add(3);
            byte[] buffer = content.ToArray();
            serialPort.Write(buffer, 0, buffer.Length);
        }
    }

    public override string ToString()
    {
        return DisplayText;
    }
}

重写ToString非常重要。这使组合框能够正确显示项目。

现在您可以将这些命令添加到组合框中:

comboBox1.Add(new Command { DisplayText = "HC1 101", CommandText = "01P00101##" });
comboBox1.Add(new Command { DisplayText = "HC2 101", CommandText = "02P00101##" });

在组合框活动中......

void ComboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
    var command = (Command)comboBox1.SelectedItem;
    if (command != null) {
        command.Send(serialPort1);
    )
}

您也可以使用“发送”按钮。这使您可以重复发送相同的命令,而无需在组合框中重新选择它。

如果不同命令的前导和尾随字节不同,您也可以将它们包含在属性中。

这种方法的一个很好的效果是,您将传输逻辑放在一个单独的类中,而不是在表单中使用它,并且您不必再复制/粘贴发送例程。