C#脚本模块出错,未将对象引用设置到对象的实例

使用问题 · 2800 次浏览
TerryPig 创建于 2024-10-15 16:30

自定义了窗口

xmal代码为

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:hc="https://handyorg.github.io/handycontrol"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:qk="https://getquicker.net"
        Width="400"
        Height="150"
        Title="调节透明度"
        mc:Ignorable="d">
  <Grid Margin="5">
    <StackPanel>
          <Slider x:Name="MySlider" Minimum="0" Maximum="255"
                  Value="128"
                LargeChange="64" SmallChange="32"   
                TickPlacement="BottomRight" TickFrequency="16"
                HorizontalAlignment="Stretch"
                />
    </StackPanel>
  </Grid>
</Window>

c#代码为

using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms;
using System.Collections.Generic;
using MessageBox = System.Windows.Forms.MessageBox;
using Quicker.Public;

public static IDictionary<string, object> dataContext;
public static ICustomWindowContext winContext;
public static Slider MySlider;

public static void OnWindowCreated(Window win, IDictionary<string, object> winData, ICustomWindowContext winContext){
    MySlider = win.FindName("MySlider") as Slider;
    MySlider.ValueChanged += MySlider_ValueChanged;//注册MySlider_ValueChanged事件
    winContext.RunSp("tiaojie", new Dictionary<string,object>{{"alpha", MySlider.Value}});
}
public static void MySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    winContext.RunSp("tiaojie", new Dictionary<string,object>{{"alpha", e.NewValue}});
}

载入窗口时调用 tiaojie 模块可以使用

但在使用 MySlider_ValueChanged 回调函数 去出现错误,如何解决呢,望大佬们给点意见


回复内容
CL 2024-10-15 18:12
#1

确认一下到底哪个方法里报错的?可以注释掉一些代码,看看是不是还报错,或者看下报错的StackTrace信息。

如果是事件方法MySlider_ValueChanged 里, winContext 是哪里来的?

H-D-G 2024-10-15 21:40
#2

声明了但在Created方法里没有赋值,所以你下面那个事件访问的是null

TerryPig 回复 H-D-G 2024-10-16 17:27 :

这个是参考一个分享的动作,结构都一样,就是如何在原生态的ValueChanged事件传入winContext 对象

CL 回复 TerryPig 2024-10-16 18:12 :

这个变量没有赋值,所以下面使用它的时候是null了。 

你把参数名和这个静态变量名弄混了,试试修改一下静态变量名,别让他们一样。


H-D-G 回复 TerryPig 2024-10-16 21:56 :

你没懂我的意思,变量是有定义域的,你在Created里使用的不是静态的变量,而是方法的参数,你的静态变量没有被赋值,一直是null

TerryPig 回复 H-D-G 2024-10-17 15:45 :

那在 MySlider_ValueChanged 过程中如何声明一个 ICustomWindowContext 对象呢

CL 回复 TerryPig 2024-10-17 15:53 :

把上面截图里的winContext改名成 _winContextSaved; 在OnWIndowCreated里,把winContext赋值给winContextSaved。 如果对c#不太了解,可能需要补充一下相关知识才好写代码。

回复主贴