2016-06-17 4 views
1

내 코스의 경매 신청을하려고합니다.타이머 버튼 재설정

namespace Auction 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 

     public MainWindow() 
     { 
      InitializeComponent(); 
      GetData("SELECT * FROM Produs"); 
      btnLogout.Visibility = System.Windows.Visibility.Hidden; 
      btnAdd.Visibility = System.Windows.Visibility.Hidden; 
      btnBid.Visibility = System.Windows.Visibility.Hidden; 
      tb.Visibility = System.Windows.Visibility.Hidden; 

     } 

     private void GetData(string SelectCommand) 
     { 
      SqlConnection conn = new SqlConnection(@"Data Source=ISAAC;Initial Catalog=licitatie;Integrated Security=True"); 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(SelectCommand); 
      cmd.Connection = conn; 
      SqlDataAdapter sda = new SqlDataAdapter(cmd); 
      DataTable dt = new DataTable("prod"); 
      sda.Fill(dt); 
      myGrid.DataContext = dt; 
     } 
     private void btnLogin_Click(object sender, RoutedEventArgs e) 
     { 
      Login login = new Login(); 
      login.Show(); 
      Close(); 

     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      Countdown(30, TimeSpan.FromSeconds(1), cur => tb.Text = cur.ToString()); 
     } 
     void Countdown(int count, TimeSpan interval, Action<int> ts) 
     { 

      var dt = new System.Windows.Threading.DispatcherTimer(); 
      dt.Interval = interval; 
      dt.Tick += (_, a) => 
      { 
       if (count-- == 0) 
       { 
        MessageBox.Show("You have won this product!"); 
        dt.Stop(); 
       } 
       else 
        ts(count); 
      }; 
      ts(count); 
      dt.Start(); 
     } 

     private void btnLogout_Click(object sender, RoutedEventArgs e) 
     { 
      MainWindow main = new MainWindow(); 
      main.Show(); 
      Close(); 
      MessageBox.Show("You are not logged. Please log in to bid", "Failed", 
       MessageBoxButton.OK, MessageBoxImage.Information); 

     } 

     private void btnAdd_Click(object sender, RoutedEventArgs e) 
     { 
      Register reg = new Register(); 
      reg.Show(); 
      Close(); 
     } 

     private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 

      var grid = sender as DataGrid; 
      var selected = grid.SelectedItem; 
      if (selected == grid.SelectedItem) 
      { 
       btnBid.Visibility = System.Windows.Visibility.Visible; 

      } 
     } 
     private void UpdateColumn() 
     { 

     } 
    } 
} 

이것은 메인 페이지입니다. 데이터베이스에서 데이터를 읽습니다. 문제는 입찰 버튼을 여러 번 눌러 재설정하는 것입니다. 백그라운드에서 작업하고 있습니다. 내가 무엇을해야 하나?

<Window x:Class="Auction.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="500" Width="800"> 
    <Grid Margin="0,148,0,3" Name="myGrid" Background="#FF00286E"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="29*"/> 
      <ColumnDefinition Width="15*"/> 
      <ColumnDefinition Width="0*"/> 
     </Grid.ColumnDefinitions> 
     <Grid HorizontalAlignment="Left" Height="66" Margin="0,-68,0,0" VerticalAlignment="Top" 
       Width="792" Background="#FF00286E" Grid.ColumnSpan="2"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="12*"/> 
       <ColumnDefinition Width="13*"/> 
      </Grid.ColumnDefinitions> 
      <Button Content="Login" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Bottom" 
        Width="102" Height="35" Name="btnLogin" Click="btnLogin_Click"> 
       <Button.Template> 
        <ControlTemplate TargetType="Button"> 
         <TextBlock TextDecorations="Underline" Margin="0,0,0,-19" FontSize="24" 
           FontFamily="Verdana" FontWeight="Bold" FontStyle="Italic"> 
        <ContentPresenter /> 
         </TextBlock> 
        </ControlTemplate> 
       </Button.Template> 
      </Button> 
      <Button Content="Logout" Grid.Column="1" HorizontalAlignment="Left" Margin="300,10,0,0" VerticalAlignment="Bottom" 
        Width="102" Height="35" Name="btnLogout" Click="btnLogout_Click"> 
       <Button.Template> 
        <ControlTemplate TargetType="Button"> 
         <TextBlock TextDecorations="Underline" Margin="0,0,0,-19" FontSize="24" 
           FontFamily="Verdana" FontWeight="Bold" FontStyle="Italic"> 
        <ContentPresenter /> 
         </TextBlock> 
        </ControlTemplate> 
       </Button.Template> 
      </Button> 
     </Grid> 
     <Grid HorizontalAlignment="Left" Height="78" Margin="0,-146,0,0" VerticalAlignment="Top" Width="792" 
       Grid.ColumnSpan="2" Background="#FF98BFD4"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="769*"/> 
       <ColumnDefinition Width="31*"/> 
      </Grid.ColumnDefinitions> 
      <Label Content="Welcome to Auction Application. Please Login to bid!" HorizontalAlignment="Center" Margin="44,28,0,0" VerticalAlignment="Top" 
        Height="40" Width="748" BorderThickness="3" FontSize="18" FontWeight="Bold" FontFamily="Verdana" Background="#FF98BFD4" Grid.ColumnSpan="2"/> 
     </Grid> 
     <Button Content="Bid" Grid.Column="1" HorizontalAlignment="Left" Margin="10,10,0,0" 
       VerticalAlignment="Top" Width="103" Height="29" FontSize="20" FontFamily="Verdana" FontStyle="Italic" 
       FontWeight="ExtraBold" Click="Button_Click" Name="btnBid"/> 

     <Button Content="Add User" Grid.Column="1" HorizontalAlignment="Left" Margin="10,255,0,0" 
       VerticalAlignment="Top" Width="103" Height="31" Name="btnAdd" Click="btnAdd_Click"/> 
     <DataGrid HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" 
        Height="298" Width="502" Name="dataGrid1" ItemsSource="{Binding}" 
        SelectionChanged="DataGrid_SelectionChanged" AlternatingRowBackground="Coral"> 

     </DataGrid> 
     <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="48" Margin="10,119,0,0" TextWrapping="Wrap" 
       VerticalAlignment="Top" Width="144" Name="tb" FontSize="20" FontWeight="Bold" FontStyle="Italic" IsReadOnly="True"/> 
    </Grid> 
</Window> 
+1

당신이 예상 입찰 버튼의 동작을 좀 더 설명 할 수 있습니다

_dt.Stop(); _dt = new System.Windows.Threading.DispatcherTimer(); 

이 변화를 시도 : 현재 _dt 먼저 새로운 타이머를 인스턴스화 다음에? 한 사람이 입찰 할 때마다 타이머가 재설정되어야합니다. – Sean

답변

0

내가 올바르게 이해하면 사용자가 입찰 버튼을 클릭 할 때마다 타이머를 재설정해야합니다. 그러나 이전 타이머가 계속됩니다. 내가 테스트하는 프로젝트에 코드를 붙여하지 않은,하지만 당신이 파견이 같은 클래스 필드 나 속성 timer로 만들 필요가 저에게 나타납니다 입찰에 대한 이벤트 핸들러 내부

private DispatchTimer _dt = new System.Windows.Threading.DispatcherTimer(); 

을의 중지

namespace Auction 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     //Class level field: 
     private DispatchTimer _dt = new System.Windows.Threading.DispatcherTimer(); 
     public MainWindow() 
     { 
      InitializeComponent(); 
      GetData("SELECT * FROM Produs"); 
      btnLogout.Visibility = System.Windows.Visibility.Hidden; 
      btnAdd.Visibility = System.Windows.Visibility.Hidden; 
      btnBid.Visibility = System.Windows.Visibility.Hidden; 
      tb.Visibility = System.Windows.Visibility.Hidden; 

     } 

     private void GetData(string SelectCommand) 
     { 
      SqlConnection conn = new SqlConnection(@"Data Source=ISAAC;Initial Catalog=licitatie;Integrated Security=True"); 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(SelectCommand); 
      cmd.Connection = conn; 
      SqlDataAdapter sda = new SqlDataAdapter(cmd); 
      DataTable dt = new DataTable("prod"); 
      sda.Fill(dt); 
      myGrid.DataContext = dt; 
     } 
     private void btnLogin_Click(object sender, RoutedEventArgs e) 
     { 
      Login login = new Login(); 
      login.Show(); 
      Close(); 

     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 

      Countdown(30, TimeSpan.FromSeconds(1), cur => tb.Text = cur.ToString()); 
     } 
     void Countdown(int count, TimeSpan interval, Action<int> ts) 
     { 
      this._dt.Stop(); 
      this._dt = new System.Windows.Threading.DispatcherTimer(); 

      this._dt.Interval = interval; 
      this._dt.Tick += (_, a) => 
      { 
       if (count-- == 0) 
       { 
        MessageBox.Show("You have won this product!"); 
        this._dt.Stop(); 
       } 
       else 
        ts(count); 
      }; 
      ts(count); 
      this._dt.Start(); 
     } 

     private void btnLogout_Click(object sender, RoutedEventArgs e) 
     { 
      MainWindow main = new MainWindow(); 
      main.Show(); 
      Close(); 
      MessageBox.Show("You are not logged. Please log in to bid", "Failed", 
       MessageBoxButton.OK, MessageBoxImage.Information); 

     } 

     private void btnAdd_Click(object sender, RoutedEventArgs e) 
     { 
      Register reg = new Register(); 
      reg.Show(); 
      Close(); 
     } 

     private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 

      var grid = sender as DataGrid; 
      var selected = grid.SelectedItem; 
      if (selected == grid.SelectedItem) 
      { 
       btnBid.Visibility = System.Windows.Visibility.Visible; 

      } 
     } 
     private void UpdateColumn() 
     { 

     } 
    } 
} 
+0

당신이해야 할 일을보다 정확하게 나타낼 수 있습니까? 너는 완벽하게 이해했다. –

+0

그게 효과가 있다면 제 답변을 정답으로 표시 하시겠습니까? – Sean