[英]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.