在Tab中处置UserControl时出现NullReferenceException

时间:2017-02-14 18:06:31

标签: tabs user-controls dispose

我正在使用C#WinForms。

我正在使用名为AGauge的用户控件。 http://www.codearteng.com/2012/08/agauge-winforms-gauge-control.html 我将控件添加到“设计”视图中的一个选项卡页面。

如果在没有打开包含控件的标签页的情况下关闭窗口,则会出现NullReferenceException(在AGauge.dll中发生NullReferenceException - 对象引用未设置为对象的实例)

如果我打开标签页然后关闭窗口,那么一切正常。

执行base.Dispose(disposing)

时,Dispose()函数发生异常

由于我没有查看AGauge.dll中的代码,我不确定该怎么做。我想我可以在打开标签页时在运行时创建控件,但这并不理想。

1 个答案:

答案 0 :(得分:0)

我通过在选项卡控件的Selected()函数中创建用户控件来解决此问题。

public class FunDapter<T> extends BaseAdapter implements Filterable  {

protected List<T> mDataItems;
protected LongExtractor<T> idExtractor;
protected final Context mContext;
private final int mLayoutResource;
private final BindDictionary<T> mBindDictionary;
private FunDapterFilter<T> funDapterFilter;


public FunDapter(Context context, List<T> dataItems, int layoutResource,
                 BindDictionary<T> dictionary) {
  this(context, dataItems, layoutResource, null, dictionary);
}

public FunDapter(Context context, List<T> dataItems, int layoutResource,
                 LongExtractor<T> idExtractor, BindDictionary<T> dictionary) {
    this.mContext = context;
    this.mDataItems = dataItems;
    this.mOrigDataItems = dataItems;
    this.mLayoutResource = layoutResource;
    this.idExtractor = idExtractor;
    this.mBindDictionary = dictionary;

}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    View v = convertView;
    final GenericViewHolder holder;
    if (null == v) {
        LayoutInflater vi =
                (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(mLayoutResource, null);
        holder = new GenericViewHolder();
        holder.root = v;



    holder.playPause=(ImageView)v.findViewById(R.id.playPause); 
    holder.playPause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ((PlayPauseClick)mContext).imageButtonOnClick(v, position);        
        }
    });


    return v;
}