locked
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. RRS feed

  • Frage

  • Hallo,

    ich habe im VS2010 im XAML einen Slider mit dem Namen slider1 eingefügt, welcher dann ein Rechteck Skalieren soll. Im Code habe ich dann folgendes eingefügt:

    ScaleTransform sct = new ScaleTransform();
        private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
    
          sct.ScaleX = slider1.Value;
          sct.ScaleY = slider1.Value;
    
          cv1.RenderTransform = sct;
        }

    Beim Ausführen meldet VS dann den Fehler bei slider1.Value: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.".

    In der MainPage.g.cs existiert jedoch der Eintrag:

    /// <summary>
        /// InitializeComponent
        /// </summary>
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public void InitializeComponent() {
          if (_contentLoaded) {
            return;
          }
          _contentLoaded = true;
          System.Windows.Application.LoadComponent(this, new System.Uri("/SilverlightApplication2;component/MainPage.xaml", System.UriKind.Relative));
          this.LayoutRoot = ((System.Windows.Controls.Grid)(this.FindName("LayoutRoot")));
          ...
          this.slider1 = ((System.Windows.Controls.Slider)(this.FindName("slider1")));
          ...
        }

    Was mache ich verkehrt?

    Gruß

    Dirk

    Montag, 4. Oktober 2010 20:59

Antworten

  • Ich habe folgendes herausgefunden - sobald ich bei dem Slider ein Minimumwert eingebe, kommt der Fehler. Sobald Minimum weg ist, funktioniert mein Vorhaben.

    Hier mal meine veränderte Version mit Fehler (Minimum - sobald man es weglöscht, funktioniert alles):

    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="100" />
          <ColumnDefinition />
        </Grid.ColumnDefinitions>    
        <Canvas Grid.Column="1" Background="DarkGray">
          <Rectangle x:Name="cv1" Fill="Beige" MouseLeftButtonDown="Canvas_MouseLeftButtonDown" 
                Width="200" Height="100" VerticalAlignment="Top" d:LayoutOverrides="Height"
                Margin="10,10,0,0">
            <Rectangle.RenderTransform>
              <TransformGroup>
                <ScaleTransform x:Name="scaletransform1" ScaleX="1" ScaleY="1"></ScaleTransform>
              </TransformGroup>
            </Rectangle.RenderTransform>
          </Rectangle>      
        </Canvas>
        <StackPanel Grid.Column="0" HorizontalAlignment="Left">
          <dataInput:Label Height="25" HorizontalAlignment="Left" Name="label1" Width="100" />
          <Slider Height="23" x:Name="slider1" Width="100" ValueChanged="slider1_ValueChanged" Minimum="1" Maximum="5" />
          <dataInput:Label Height="25" Name="label2" Width="100" Content="{Binding ElementName=slider1,Path=Value}" />
        </StackPanel>
      </Grid>

    Hier der dazugehörige Code:

    public MainPage()
        {
          InitializeComponent();
          slider1.Value = 1;
        }
    
        private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
          label1.Content = "x: " + (Math.Round(e.GetPosition(cv1).X)).ToString();
          label1.Content += ", y: " + (Math.Round(e.GetPosition(cv1).Y)).ToString();
        }
        
        private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {      
          scaletransform1.ScaleX = slider1.Value;
          scaletransform1.ScaleY = slider1.Value;
        }

    Gruß

    Dirk

    Mittwoch, 6. Oktober 2010 15:22

Alle Antworten

  • Hallo,

    schwer so zu sagen. Könntest du bitte noch das dazugehörige XAML posten? Eventuell lässt sich daraus mehr lesen.

     

    Christian~

    Dienstag, 5. Oktober 2010 20:51
  • Hallo Dirk,
    this.slider1 = ((System.Windows.Controls.Slider)(this.FindName("slider1"))); ... }

    setz mal bitte hier und an der entsprechenden Zeile, die den Fehler verursacht, einen Breakpoint und schau nach, ob die o.a. Zeile überhaupt durchlaufen wird und für die Fehlerzeile, was genau nun "null" bzw. "nothing" ist. Ggfs. existiert auch einfach "sct" oder "cv1" nicht.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 5. Oktober 2010 22:22
  • Ich habe folgendes herausgefunden - sobald ich bei dem Slider ein Minimumwert eingebe, kommt der Fehler. Sobald Minimum weg ist, funktioniert mein Vorhaben.

    Hier mal meine veränderte Version mit Fehler (Minimum - sobald man es weglöscht, funktioniert alles):

    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="100" />
          <ColumnDefinition />
        </Grid.ColumnDefinitions>    
        <Canvas Grid.Column="1" Background="DarkGray">
          <Rectangle x:Name="cv1" Fill="Beige" MouseLeftButtonDown="Canvas_MouseLeftButtonDown" 
                Width="200" Height="100" VerticalAlignment="Top" d:LayoutOverrides="Height"
                Margin="10,10,0,0">
            <Rectangle.RenderTransform>
              <TransformGroup>
                <ScaleTransform x:Name="scaletransform1" ScaleX="1" ScaleY="1"></ScaleTransform>
              </TransformGroup>
            </Rectangle.RenderTransform>
          </Rectangle>      
        </Canvas>
        <StackPanel Grid.Column="0" HorizontalAlignment="Left">
          <dataInput:Label Height="25" HorizontalAlignment="Left" Name="label1" Width="100" />
          <Slider Height="23" x:Name="slider1" Width="100" ValueChanged="slider1_ValueChanged" Minimum="1" Maximum="5" />
          <dataInput:Label Height="25" Name="label2" Width="100" Content="{Binding ElementName=slider1,Path=Value}" />
        </StackPanel>
      </Grid>

    Hier der dazugehörige Code:

    public MainPage()
        {
          InitializeComponent();
          slider1.Value = 1;
        }
    
        private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
          label1.Content = "x: " + (Math.Round(e.GetPosition(cv1).X)).ToString();
          label1.Content += ", y: " + (Math.Round(e.GetPosition(cv1).Y)).ToString();
        }
        
        private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {      
          scaletransform1.ScaleX = slider1.Value;
          scaletransform1.ScaleY = slider1.Value;
        }

    Gruß

    Dirk

    Mittwoch, 6. Oktober 2010 15:22
  • Danke, guter Mensch! Halben Tag habe ich mir den Kopf zerschlagen, warum ich diesen Fehler raus bekomme! Danke! 
    Donnerstag, 10. August 2017 12:23