【问题标题】:How do i make a label not visible after 15 seconds I triggered a button?如何在触发按钮 15 秒后使标签不可见?
【发布时间】:2020-02-08 11:42:01
【问题描述】:

我不知道如何使用计时器或 if 语句。如何触发它?然后让另一个标签出现?

namespace Labeltimer
{

public partial class MainPage : ContentPage
{

    public MainPage()
    {
        InitializeComponent();
        MyImage.Source = ImageSource.FromFile("logo.png");

    }

    void TButton_Clicked(object sender, System.EventArgs e)
    {

        T1Text.IsVisible = true;

        //T2Text.IsVisible = true;

    }

}
}

【问题讨论】:

标签: xamarin xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

在你的TButton_Clicked

async void TButton_Clicked(object sender, System.EventArgs e)
{
    await Task.Delay(15000); // 15000ms == 15s
    T1Text.IsVisible = false;
}

我建议您阅读有关异步编程的更多信息。

【讨论】:

    【解决方案2】:

    有很多方法可以选择,例如:

    1.System.Timers.Timer

    private  void TButton_Clicked(object sender, EventArgs e)
        {
            System.Timers.Timer t = new System.Timers.Timer(15000);   // intial class Timer,set internal 15000ms;   
            t.Elapsed += new System.Timers.ElapsedEventHandler(doSometing2); //Execute events at time of arrival; 
            t.AutoReset = false;   //Set to execute (false) once and execute (true) all the time   
            t.Enabled = true;
        }
    

    方法doSometing2

    private void doSometing2(object sender, ElapsedEventArgs e)
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                mLabel.IsVisible = false;
            });
        }
    

    2。 Device.StartTimer

     private  void TButton_Clicked(object sender, EventArgs e)
        {
            Device.StartTimer(TimeSpan.FromSeconds(15), doSometing);
        }
    

    方法doSometing

    private bool doSometing()
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                mLabel.IsVisible = false;
            });
            return true;
        }
    

    3.线程.睡眠

    private  void TButton_Clicked(object sender, EventArgs e)
        {
            Thread.Sleep(15000);
            mLabel.IsVisible = false;
        }
    

    4.任务延迟

    private async void TButton_Clicked(object sender, EventArgs e)
        {
            await Task.Delay(15000); // 15000ms == 15s
            mLabel.IsVisible = false;
        }
    

    【讨论】:

    【解决方案3】:

    我这样做的方式,只需在该方法中添加 StartTimer,它将在 15 秒后调用:

     Device.StartTimer(TimeSpan.FromSeconds(15), () =>
            {
                T1Text.IsVisible = false;
                return false;
            });
    

    如果你希望它只发生一次(如 JS 的 SetTimeout),则返回 false,如果你希望它每 15 秒发生一次,则返回 true(如 JS 的 SetInterval)。

    【讨论】:

      【解决方案4】:
      public class StateToVisibilityConverter : IValueConverter
          {
              public object Convert(object value, Type targetType, object parameter, 
                      System.Globalization.CultureInfo culture)
              {
                  if (value is State)
                  {
                      State state = (State)value;
                      switch (state)
                      {
                          case State.Away:
                          case State.Gone:
                              return Visibility.Visible;
                          default:
                              return Visibility.Collapsed;
                      }
                  }
              }
              enter code here
              public object ConvertBack(object value, Type targetType, object parameter, 
                      System.Globalization.CultureInfo culture)
              {
                  return State.None; // your default state
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-10
        • 1970-01-01
        • 2020-05-15
        • 2017-05-08
        • 2018-05-28
        • 1970-01-01
        • 1970-01-01
        • 2017-05-16
        相关资源
        最近更新 更多