[英]How to log a button press with specific info?
我正在为我的学校开发一个程序,用于跟踪学生何时离开并返回 class。 该程序将在 class 的计算机上,学生将 select 他们的时期、姓名和他们要去的地方。 我已经有一个系统,他们在其中 select 他们的信息并按下退出按钮。 我承认该程序存在一些小错误。 EX:在所有三个带有学生信息的选择器都填写完毕之前,您不能点击登录或退出按钮,但是如果您填写了选择器,点击退出,您可以重新填写信息点击再次退出而不用aver重新登录。
我被难住的下一个目标是在另一个Stacklayout
中记录所有注销注销,当您单击屏幕左上角的日志按钮时,该 Stacklayout 可见,我希望它能够将其他元素推开所以它会产生切换到另一个页面的错觉。 我有这个想法,但我不确定如何在单击注销时使用选择器信息将 label 添加到堆栈布局中。
这是我目前拥有的 c# 代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace Sign_In_Out
{
public partial class MainPage : ContentPage
{
string[] firstPeriodNames = { "Kid 1", "Kid 2", "Kid 3", " Kid 4" };
string[] secondPeriodNames = { "Kid 5", "Kid 6", "Kid 7", " Kid 8" };
string[] thirdPeriodNames = { "Kid 9", "Kid 10", "Kid 11", " Kid 12" };
string[] fourthPeriodNames = { "Kid 13", "Kid 14", "Kid 15", " Kid 16" };
string[] fivePeriodNames = { "Kid 17", "Kid 18", "Kid 19", " Kid 20" };
string[] sixPeriodNames = { "Kid 21", "Kid 22", "Kid 23", " Kid 24" };
string[] sevenPeriodNames = { "Kid 25", "Kid 26", "Kid 28", " Kid 28" };
public MainPage()
{
InitializeComponent();
BindingContext = this;
}
private void PeriodPicker_SelectedIndexChanged(object sender, EventArgs e)
{
Picker picker = sender as Picker;
var selectedItem = picker.SelectedItem;
if (selectedItem.ToString() == "1st Period")
{
kidSelector.ItemsSource = firstPeriodNames;
} else if (selectedItem.ToString() == "2nd Period")
{
kidSelector.ItemsSource = secondPeriodNames;
}
else if (selectedItem.ToString() == "3rd Period")
{
kidSelector.ItemsSource = thirdPeriodNames;
}
else if (selectedItem.ToString() == "4th Period")
{
kidSelector.ItemsSource = fourthPeriodNames;
}
else if (selectedItem.ToString() == "5th Period")
{
kidSelector.ItemsSource = fivePeriodNames;
}
else if (selectedItem.ToString() == "6th Period")
{
kidSelector.ItemsSource = sixPeriodNames;
}
else if (selectedItem.ToString() == "7th Period")
{
kidSelector.ItemsSource = sevenPeriodNames;
}
if (PeriodPicker.SelectedItem != null && kidSelector.SelectedItem != null && destination.SelectedItem != null)
{
SignOut.IsEnabled = true;
}
else
{
SignOut.IsEnabled = false;
}
}
private void SignInButton(object sender, EventArgs e)
{
SignOut.IsEnabled = true;
BackgroundColor = Color.ForestGreen;
SignIn.IsEnabled = false;
}
private void SignOutButton(object sender, EventArgs e)
{
SignIn.IsEnabled = true;
BackgroundColor = Color.Red;
destination.SelectedIndex = -1;
kidSelector.SelectedIndex = -1;
PeriodPicker.SelectedIndex = 0;
SignOut.IsEnabled = false;
}
private void kidSelector_SelectedIndexChanged(object sender, EventArgs e)
{
if (PeriodPicker.SelectedItem != null && kidSelector.SelectedItem != null && destination.SelectedItem != null)
{
SignOut.IsEnabled = true;
}
else
{
SignOut.IsEnabled = false;
}
}
private void destination_SelectedIndexChanged(object sender, EventArgs e)
{
if (PeriodPicker.SelectedItem != null && kidSelector.SelectedItem != null && destination.SelectedItem != null)
{
SignOut.IsEnabled = true;
}
else
{
SignOut.IsEnabled = false;
}
}
private void LogButtonClicked(object sender, EventArgs e)
{
}
private void AdminButtonClicked(object sender, EventArgs e)
{
}
}
}
这是 Xamarin 代码:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Sign_In_Out.MainPage"
BackgroundColor="ForestGreen"
NavigationPage.HasNavigationBar="False">
<StackLayout>
<StackLayout Orientation="Horizontal" HorizontalOptions="End">
<Button Clicked="AdminButtonClicked" Text="Admin" Margin="0" BackgroundColor="Black" VerticalOptions="End"></Button>
<Button Clicked="LogButtonClicked" Text="Log" Margin="0" BackgroundColor="Black" VerticalOptions="End"></Button>
</StackLayout>
<StackLayout IsVisible="False" x:Name="Admin">
<Label Text="Admin"></Label>
</StackLayout>
<StackLayout IsVisible="False" x:Name="Log">
<Label Text="Log"></Label>
</StackLayout>
<StackLayout>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"></ColumnDefinition>
<ColumnDefinition Width="3*"></ColumnDefinition>
<ColumnDefinition Width="3*"></ColumnDefinition>
<ColumnDefinition Width="3*"></ColumnDefinition>
<ColumnDefinition Width="3*"></ColumnDefinition>
<ColumnDefinition Width="3*"></ColumnDefinition>
<ColumnDefinition Width="3*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Picker x:Name="PeriodPicker" SelectedIndex="0" SelectedIndexChanged="PeriodPicker_SelectedIndexChanged" Grid.Column="1" Margin="0, 150, 0, 0">
<Picker.Items>
<x:String></x:String>
<x:String>1st Period</x:String>
<x:String>2nd Period</x:String>
<x:String>3rd Period</x:String>
<x:String>4th Period</x:String>
<x:String>5th Period</x:String>
<x:String>6th Period</x:String>
<x:String>7th Period</x:String>
</Picker.Items>
</Picker>
<Picker Grid.Column="3" x:Name="kidSelector" SelectedIndexChanged="kidSelector_SelectedIndexChanged" Margin="0, 150, 0, 0"></Picker>
<Picker Grid.Column="5" x:Name="destination" SelectedIndexChanged="destination_SelectedIndexChanged" Margin="0, 150, 0, 0">
<Picker.Items>
<x:String>Bathroom</x:String>
<x:String>Office</x:String>
<x:String>Clinic</x:String>
<x:String>Leaving Early</x:String>
</Picker.Items>
</Picker>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button x:Name="SignOut" Grid.Column="1" Margin="0, 125, 0, 0" Clicked="SignOutButton" HeightRequest="150" IsEnabled="False" Text="Sign-Out" FontSize="Large"></Button>
<Button x:Name="SignIn" Grid.Column="3" Margin="0, 125, 0, 0" Clicked="SignInButton" HeightRequest="150" IsEnabled="False" Text="Sign-In" FontSize="Large"></Button>
</Grid>
</StackLayout>
</StackLayout>
</ContentPage>
提前感谢任何可以帮助我的人。
而不是使用这个:
if (PeriodPicker.SelectedItem != null && kidSelector.SelectedItem != null && destination.SelectedItem != null)
{
SignOut.IsEnabled = true;
}
else
{
SignOut.IsEnabled = false;
}
你应该像这样声明一个字符串:
...
string[] sevenPeriodNames = { "Kid 25", "Kid 26", "Kid 28", " Kid 28" };
string period = "", kid ="", destination = ""; //<--add this
声明字符串后,您可以像这样使用它:
private void PeriodPicker_SelectedIndexChanged(object sender, EventArgs e)
{
...
...
if (PeriodPicker.SelectedIndex != -1)
{
period = PeriodPicker.Items[PeriodPicker.SelectedIndex];
}
}
将其用于其他 2 个 SelectedIndexChanged,之后您可以在应用程序中存在的任何方法中使用该变量。 假设您想在 SignOutButton Clicked 事件中使用它:
private void SignOutButton(object sender, EventArgs e)
{
if (period != "" && kid != "" && destination != "")
{
SignIn.IsEnabled = true;
BackgroundColor = Color.Red;
destination.SelectedIndex = -1;
kidSelector.SelectedIndex = -1;
PeriodPicker.SelectedIndex = 0;
SignOut.IsEnabled = false;
}
}
您可以创建一个SignOutLog class:
public class SignOutLog
{
public string PeriodNames{ get; set; }
public string KidNames{ get; set; }
public string Destination { get; set; }
}
然后当您单击退出按钮时,使用Preferences保存 SignoutLog 信息:
private void SignOutButton(object sender, EventArgs e)
{
SignIn.IsEnabled = true;
BackgroundColor = Color.Red;
destination.SelectedIndex = -1;
kidSelector.SelectedIndex = -1;
PeriodPicker.SelectedIndex = 0;
SignOut.IsEnabled = false;
List<SignOutLog> logs;
if (Preferences.ContainsKey("sign_out_log"))
{
string logsString = Preferences.Get("sign_out_log", "default_value");
logs = JsonConvert.DeserializeObject<List<SignOutLog>>(logsString);
}
else
{
logs = new List<SignOutLog>();
}
SignOutLog log = new SignOutLog () {PeriodNames=PeriodPicker.SelectedItem,KidNames= kidSelector.SelectedItem,Destination = destination.SelectedItem};
logs.Add(log);
string logsJsonString = JsonConvert.SerializeObject(logs);
Preferences.Set("sign_out_log", logsJsonString); //save the data
}
单击日志按钮后,您可以推送一个新页面:
private void LogButtonClicked(object sender, EventArgs e)
{
Navigation.PushAsync(new LogsPage());
}
在您的 LogsPage 中,您可以定义一个列表视图来显示日志:
public partial class LogsPage: ContentPage
{
public LogsPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();
string logsString = Preferences.Get("sign_out_log", "default_value");
List<SignOutLog> logs = JsonConvert.DeserializeObject<List<SignOutLog>>(logsString);
yourListView.ItemsSource= logs;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.