0

オブジェクト ID を比較する必要があるため、Form1 の各テキスト ボックスを通過し、それらのタグを取得するループがあります。オブジェクトがテキスト ボックスの 1 つに既に存在する状況では、ユーザーがこのオブジェクトを再度追加することを許可したくありませんが、このオブジェクトがテキスト ボックスのいずれにも存在しない場合にのみ、ユーザーはこのアイテムを追加できます。

以下のこのループで試してみましたが、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」と表示され続けるため、うまくいかないようです。この行に if (resval.types.xan_ID == tbItems.types.xan_ID) 必要なメッセージ ボックスが表示された後、このコードを変更してこの目標を達成するにはどうすればよいですか。

                        // Get the name which will be passed into the textbox
                        var resval = form2result.getValue();

                        //go through each of my textbox
                        foreach (TextBox tb in TextBoxList)
                        {
                            var tbItems = (ReportItems)tb.Tag;
                            if (tb.Text != "")
                            {
                                //if the item returned is the same as an item in the textbox
                                if (resval.types.xan_ID == tbItems.types.xan_ID)
                                {
                                    // display this message and break out of the loop
                                    MessageBox.Show("You have previously selected this report, please chose another");
                                    break;
                                }
                                    // otherwise add the item into the textbox.
                                else
                                {
                                    // otherwise add name to the textbox
                                    _dict[sender].Text = resval.ToString();
                                }
                            }   
                        }

レポート項目

public class ReportItems
{
    public DataSet1.xspGetAnalysisTypesRow types { get; set; }

    //Analysis types or Reports
    public ReportItems(DataSet1.xspGetAnalysisTypesRow analysisTypes)
    {
        types = analysisTypes;
    }

    //Return the name of this type. 
    public override string ToString()
    {
        return this.types.xan_Name;
    }
}

getValueFunction (これは別の形式です)

    public ReportItems getValue()
    {
        ReportItems selection = (ReportItems)reportListBx.SelectedItem;

        // if user has selected a value             
            return selection;           
    }
4

3 に答える 3

1

_dict[sender] と TextBoxList の間のリンクが何であるかはわかりませんが、テキストの設定と同じポイントとしてタグを設定していません。これらが同じオブジェクトを参照していると仮定すると、タグのないテキスト ボックスがあるため、次にこのメソッドを使用するときにエラーが発生します。

                    // Get the name which will be passed into the textbox
                    var resval = form2result.getValue();
                    // The user didn't select anything somehow.
                    if (resval == null)
                    {
                      MessageBox.Show("Nothing Selected"); 
                      return;
                    }
                    // resval hasn't been setup correctly.
                    if (resval.types == null)
                    {
                      MessageBox.Show("Internal Error"); 
                      return;
                    }
                    Boolean alreadyExists = false;
                    //go through each of my textbox
                    foreach (TextBox tb in TextBoxList)
                    {
                        var tbItems = (ReportItems)tb.Tag;
                        //The Textbox must contain text and tbItems must not be null
                        if (tb.Text != "" && tbItems != null)
                        {
                            //The tag has been set, but somehow the types are null?
                            if (tbItems.types == null)
                            {
                                MessageBox.Show("Internal Error");    
                            break;
                            }
                            //if the item returned is the same as an item in the textbox
                            if (resval.types.xan_ID == tbItems.types.xan_ID)
                            {
                                alreadyExists = true;
                                // display this message and break out of the loop
                                MessageBox.Show("You have previously selected this report, please chose another");
                                break;
                            }
                                // otherwise add the item into the textbox.
                        }   
                    }
                    if (!alreadyExists)
                    {
                        // otherwise add name to the textbox
                        _dict[sender].Text = resval.ToString();
                        //set the tag? 
                        _dict[sender].Tag = tbItems;
                    }
于 2012-09-26T11:01:18.000 に答える
0
// Get the name which will be passed into the textbox
        var resval = form2result.getValue();
        ArrayList arrayList = new ArrayList();

        //go through each of my textbox
        foreach (TextBox tb in TextBoxList)
        {
            var tbItems = (ReportItems) tb.Tag;
            if (tb.Text != "") return;
            //if the item returned is the same as an item in the textbox
            /* Try this if the below line doesnt work
               if(string.IsNullOrEmpty(resval.types.xan_ID) || string.IsNullOrEmpty(tbItems.types.xan_ID) return;

               if (resval.types.xan_ID == tbItems.types.xan_ID) return;

            */
            if ((string)(resval.types.xan_ID) == (string)(tbItems.types.xan_ID)) return;
            // otherwise add the item into the textbox.

            // otherwise add name to the textbox
            arrayList.Add(resval.ToString());
        }

        foreach (var arr in arrayList)
        {
            // something = arr.ToString();

        }
于 2012-09-26T10:35:30.980 に答える
0

jqueryを使用して、テキストボックス(ユーザーがフォーカスを追加する場所)のonmouseoverまたはonclickイベントを処理し、ユーザーが以前のテキストボックスにオブジェクトを追加するかどうかを確認できます。

于 2012-09-26T11:03:57.167 に答える