0

Мне необходимо при изменении значения элемента Slider выводить новое значение в Label, но я столкнулся с ошибкой:

Exception thrown: 'System.NullReferenceException' in URCPS.dll
Object reference not set to an instance of an object.

Будто я не инициализировал текстовую метку Label прежде чем использовать её. Вот код:

MainWindow.xaml:

<Window x:Class="URCPS.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:local="clr-namespace:URCPS"
  mc:Ignorable="d"
  Title="MainWindow" Height="475" Width="500">
  <Grid x:Name="grid" HorizontalAlignment="Center" Width="550" Height="434" VerticalAlignment="Bottom">
    <GridSplitter Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="0, 0, 0, 60"/>
    <Button x:Name="clickBtn" HorizontalAlignment="Center" VerticalAlignment="Center" Height="340" Width="400" Content="Start" Margin="0, 0, 0, 60" FontSize="35" FontFamily="Arial"/>
    <Slider x:Name="timeSlider" Value="5" Minimum="1" Maximum="60" VerticalAlignment="Bottom" Margin="50, 0, 50, 35" TickPlacement="BottomRight" ValueChanged="SetValue" TickFrequency="2" IsSnapToTickEnabled="True"/>
      <Label x:Name="sliderValueLbl" Content="5" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="8" FontSize="15"/>
    </Grid>
</Window>

MainWindow.xaml.cs:

using System;
using System.Windows;

namespace URCPS { public partial class MainWindow : Window {

public MainWindow()
{
  InitializeComponent();
}

private void SetValue(object sender, RoutedPropertyChangedEventArgs&lt;double&gt; e)
{
  sliderValueLbl.Content = e.NewValue;//здесь вылазит ошибка
}

} }

XelaNimed
  • 3,912
  • 19
  • 46
  • У Вас sliderValueLbl null или e? – XelaNimed Feb 24 '23 at 09:43
  • Дебажить пробовали, чтобы хотя бы узнать, что Null: ивент или слайдер? – Andrei Khotko Feb 24 '23 at 09:44
  • 1
    sliderValueLbl.Content = e?.NewValue ?? 0; а вообще в WPF не используют Label, в WPF для отображения текста используют TextBlock – aepot Feb 24 '23 at 11:59
  • @AndreiKhotko я ещё плохо разбираюсь в Visual Studio, я понял только то, что ошибка возникает на 14 строке при попытке присвоить новое значение Label. Если бы я знал причину ошибки, очевидно бы не задавал вопрос. – dikiy_opezdal Feb 24 '23 at 13:48
  • @aepot Хорошо, тогда как присовить новое значение для TextBlock. – dikiy_opezdal Feb 24 '23 at 13:49
  • 2
    Text вместо Content. .Text = e?.NewValue.ToString() ?? "0"; – aepot Feb 24 '23 at 13:50
  • Я нашел причину проблемы. Метод SetValue почему-то вызываеться сам по себе, до того как появиться окно приложения, и соответственно в тот момент sliderValueLbl ещё не имеет значения. Исправление: if (sliderValueLbl!=null) sliderValueLbl.Text = e.NewValue.ToString(); – dikiy_opezdal Feb 24 '23 at 14:15

0 Answers0