我编写了一个代码,使用超链接点击事件将命令发送到串行设备。因为我不断添加越来越多的超链接,我想通过制作所有命令选项的下拉列表来简化应用程序,以便在单击特定的一个时,事件会在串行端口向下触发该特定命令单击链接时的操作方式。我不知道如何设置它,所以如果我能看到一个例子,我将不胜感激。下面是单击链接时我的代码示例,我希望能够执行此操作,但是从下拉列表中选择后。
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);
}
}
答案 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);
)
}
您也可以使用“发送”按钮。这使您可以重复发送相同的命令,而无需在组合框中重新选择它。
如果不同命令的前导和尾随字节不同,您也可以将它们包含在属性中。
这种方法的一个很好的效果是,您将传输逻辑放在一个单独的类中,而不是在表单中使用它,并且您不必再复制/粘贴发送例程。