树莓派开发扩展十二 -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;
             }
         }
     }
 }
相关推荐
hez20104 小时前
在 .NET 上构建超大托管数组
c#·.net·.net core·gc·clr
雨落倾城夏未凉6 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
唐青枫7 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
唐青枫8 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m6258 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net
用户91721561902118 天前
C# 通信协议增量解析:用状态机处理半包和粘包
c#
小码编匠8 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net
唐青枫10 天前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech11 天前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf12 天前
C#摸鱼实录——IoC与DI案例详解
c#