树莓派开发扩展十二 -C#编写客户端控制小车 Xamarin.Forms

1、效果

2、前台代码

XML 复制代码
<StackLayout>
    <Frame
        Padding="24"
        BackgroundColor="#2196F3"
        CornerRadius="0">
        <Label
            FontSize="30"
            HorizontalTextAlignment="Center"
            Text="树霉派小车控制器"
            TextColor="White" />
    </Frame>
 
    <Label
        x:Name="lbInfo"
        Padding="30,10,30,10"
        FontSize="18"
        Text="Wait Info!" />
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="50" />
            <RowDefinition Height="50" />
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <StackLayout Grid.ColumnSpan="3" Orientation="Horizontal">
            <Label
                Margin="15,0,0,0"
                Text="IP地址:"
                VerticalTextAlignment="Center" />
            <Editor x:Name="tbIP" WidthRequest="200" />
        </StackLayout>

        <StackLayout
            Grid.Row="1"
            Grid.ColumnSpan="3"
            Orientation="Horizontal">
            <Label Text="通讯端口:" VerticalTextAlignment="Center" />
            <Editor x:Name="tbPort" WidthRequest="200" />
        </StackLayout>

        <Button
            Grid.Row="0"
            Grid.Column="3"
            Clicked="Button_Click"
            Text="连接服务" />
        <Button
            Grid.Row="1"
            Grid.Column="3"
            Clicked="Button_Click"
            Text="断开服务" />

        <Button
            Grid.Row="2"
            Grid.Column="0"
            Clicked="Button_Click"
            Text="手动模式" />
        <Button
            Grid.Row="2"
            Grid.Column="1"
            Clicked="Button_Click"
            Text="自动模式" />
        <Button
            Grid.Row="2"
            Grid.Column="2"
            Clicked="Button_Click"
            Text="智能模式" />


        <Button
            Grid.Row="3"
            Grid.Column="0"
            Clicked="Button_Click"
            Text="加速" />
        <Button
            Grid.Row="3"
            Grid.Column="1"
            Clicked="Button_Click"
            Text="减速" />

        <Button
            x:Name="butFornt"
            Grid.Row="4"
            Grid.Column="1"
            Pressed="ButPressed_Click"
            Released="ButReleased_Click"
            Text="前" />
        <Button
            x:Name="butLeft"
            Grid.Row="5"
            Grid.Column="0"
            Pressed="ButPressed_Click"
            Released="ButReleased_Click"
            Text="左" />
        <Button
            x:Name="butRight"
            Grid.Row="5"
            Grid.Column="2"
            Pressed="ButPressed_Click"
            Released="ButReleased_Click"
            Text="右" />
        <Button
            x:Name="butBack"
            Grid.Row="6"
            Grid.Column="1"
            Pressed="ButPressed_Click"
            Released="ButReleased_Click"
            Text="后" />
    </Grid>
</StackLayout>

3、后台代码

cs 复制代码
 public partial class MainPage : ContentPage
 {
     TcpClient client = null;
     public MainPage()
     {
         InitializeComponent();
          
     }

     private void Button_Click(object sender, EventArgs e)
     {
         Button but = sender as Button;
         if (but != null)
         {
             string tag = but.Text;
             switch (tag)
             {
                 case "连接服务":
                     try
                     {
                         IPAddress address = IPAddress.Parse(tbIP.Text.Trim());
                         int port = Convert.ToInt32(tbPort.Text.Trim());
                         IPEndPoint endPoint = new IPEndPoint(address, port);
                         client = new TcpClient();
                         client.Connect(endPoint);
                         SetInfo("连接服务器成功!");
                     }
                     catch (Exception ex)
                     {
                         SetInfo("连接服务器异常:" + ex.Message);

                     }
                     break;
                 case "断开服务":
                     try
                     {
                         client.Close();
                         SetInfo("断开服务器成功!");


                     }
                     catch (Exception ex)
                     {
                         SetInfo("断开服务器异常:" + ex.Message);

                     }
                     break;
                 case "手动模式":
                     SendMsgToServer("s");
                     break;
                 case "自动模式":
                     SendMsgToServer("a");
                     break;
                 case "智能模式":
                     SendMsgToServer("mu");
                     break;

                 case "加速":
                     SendMsgToServer("up");
                     break;
                 case "减速":
                     SendMsgToServer("down");
                     break;
                 default:
                     SetInfo("按钮关联事件失败");
                     break;
             }
          
         }

     }

     private void SetInfo(string msg)
     {
         lbInfo.Text = msg;
     }



     private void ButReleased_Click(object sender, EventArgs e)
     {
         Button but = sender as Button;
         if (but != null)
         {
             string tag = but.Text;
             switch (tag)
             {
                 case "前":
                 case "后":
                 case "左":
                 case "右":
                     SendMsgToServer("s");
                     break;
                 default:
                     SetInfo("按钮关联事件失败");
                     break;
             }
         }
     }

     private void SendMsgToServer(string msg)
     {
         if (client == null)
         {
             return;
         }
         try
         {
             byte[] data = System.Text.Encoding.ASCII.GetBytes(msg);
             client.GetStream().Write(data, 0, data.Length);
             SetInfo("发送信息至服务器:" + msg);
         }
         catch (Exception ex)
         {
             SetInfo("发送信息至服务器异常:" + ex.Message);

         }


     }

     private void ButPressed_Click(object sender, EventArgs e)
     {
         Button but = sender as Button;
         if (but != null)
         {
             string tag = but.Text;
             switch (tag)
             {
                 case "前":
                     SendMsgToServer("f");
                     break;
                 case "后":
                     SendMsgToServer("b");
                     break;
                 case "左":
                     SendMsgToServer("l");
                     break;
                 case "右":
                     SendMsgToServer("r");
                     break;
                 default:
                     SetInfo("按钮关联事件失败");
                     break;
             }
         }
     }
 }
相关推荐
唐青枫1 小时前
C#.NET dapper 详解
c#·.net
死也不注释3 小时前
【鸡零狗碎记录】
unity·c#
Maybe_ch3 小时前
.NET-键控服务依赖注入
开发语言·c#·.net
★YUI★7 小时前
学习游戏制作记录(剑投掷技能)7.26
学习·游戏·unity·c#
小乖兽技术7 小时前
C#与C++交互开发系列(二十四):WinForms 应用中嵌入C++ 原生窗体
c++·c#·交互
I'mSQL8 小时前
C#与WPF使用mvvm简单案例点击按钮触发弹窗
开发语言·c#·wpf
工藤新一OL9 小时前
把xml的格式从utf-8-bom转为utf-8
xml·c#·asp.net·.netcore·visual studio
henreash10 小时前
NLua和C#交互
开发语言·c#·交互
SAJalon13 小时前
C#集合全面解析
c#
SAJalon15 小时前
C#数组全面解析
c#