你好,
我有一個大綱框,它有一個與之關聯的菜單腳本。 該菜單腳本有幾個菜單項,其中一些有子菜單。許多子菜單包含一組相互排斥的選項,當它們被選中時,我想打勾,同時取消選中所有選項(例如,如果我的子菜單設置表中的小數位數到 1、2、3 或 4,然後如果我選擇“2”,我將要選中“2”項,並取消選中“1”、“3”和“4”項)。
我仍在開發這個應用程序,所以當我添加新選項和/或修改現有選項時,實際的菜單結構會不斷變化。 因此,我希望避免對上述檢查/取消檢查過程進行硬編碼。 相反,我想自動識別我剛剛在哪個子菜單中單擊了一個項目,然後只運行一個小函數來清除同一子菜單中的所有刻度,然後檢查我剛剛單擊的項目。如果我可以讓我的腳本告訴我剛剛單擊了哪個菜單項,我可以在“<< get submenu”屬性的幫助下做到這一點。
我可以為每個項目設置一個計數變量(即“M=1”為第一個菜單項,“M=2”為第二個,“M=3”為第三個等等),然後只引用的值M 計算出我剛剛單擊了哪個項目(正如我在下面的小示例中所做的那樣,我已經製作出來只是為了說明問題),但是每次菜單時我都必須更改所有分配已編輯 - 這反而違背了練習的目標。
這可以做到嗎? 我看不到可以為我提供此信息的大綱框的任何屬性。
非常感謝
expr_POD =表達式(為了(我= 1 , 我<= 4 , i++, My_OutlineBox <<設置菜單項狀態( 1 +我, 0 )); My_OutlineBox <<設置菜單項狀態( 1 +莢, 1 ));
expr_Rec =表達式(為了(我= 1 , 我<= 3 , i++, My_OutlineBox <<設置菜單項狀態( 6 +我, 0 )); My_OutlineBox <<設置菜單項狀態( 6 +錄音, 1 ));
expr_Doc =表達式(為了(我= 1 , 我<= 4 , i++, My_OutlineBox <<設置菜單項狀態( 10 +我, 0 )); My_OutlineBox <<設置菜單項狀態( 10 +文檔, 1 ));
My_OutlineBox =大綱框( “我的大綱框” ,
文本框( “櫥窗裡的一些東西” ),
<<設置菜單腳本(
{
“小數點” , " " ,
“1 個吊艙” , 點= 1 ; expr_POD,
“2 莢” , 點= 2 ; expr_POD,
“3 莢” , 點= 3 ; expr_POD,
“4 莢” , 點= 4 ; expr_POD,
“接受者” , " " ,
“研發” , 建議 = 1 ; expr_Rec,
“營銷” , 建議 = 2 ; expr_Rec,
“預售” , 建議 = 3 ; expr_Rec,
“文件格式” , " " ,
《四開本》 , 文檔= 1 ; expr_Doc,
“傻瓜” , 文檔= 2 ; expr_Doc,
“A4” , 文檔= 3 ; expr_Doc,
“藥片” , 文檔= 4 ; expr_Doc,
“電子郵件” , 文檔= 5 ; expr_Doc
}
),
/* 定義子菜單 */
<<設置子菜單( 1 , 4 ),
<<設置子菜單( 6 , 3 ),
<<設置子菜單( 10 , 5 ),
/* 設置默認值 */
<<設置菜單項狀態( 2 , 1 ),
<<設置菜單項狀態( 7 , 1 ),
<<設置菜單項狀態( 11 , 1 )
);
新窗戶( “西北” ,
My_OutlineBox
);
謝謝賈斯汀-我會這樣做的。我過去幾次發現我忽略了一個解決問題的屬性,只是因為我沒有意識到它與手頭問題的相關性——所以很高興知道我沒有錯過一些明顯的東西在這種場合。
非常感謝您的幫助
您是對的,沒有用於獲取所選菜單項索引的 JSL 消息,例如 <
我建議不要像上面那樣使用三個不同的表達式,而是使用具有三個參數的函數。 使用函數消除了對無關變量的需求,還簡化了以後添加新菜單項的過程,並減少了代碼重複。 有關詳細信息,請參見下面的示例。
setMenuChecked = Function(
{
startIndexForSubgroup, // The index of the first menu item for this subgroup
endIndexForSubgroup, // The index of the last menu item for this subgroup
indexOfSelectedItem // The index of the item that was just selected
},
{i},
For( i = startIndexForSubgroup, i <= endIndexForSubgroup, i++,
My_OutlineBox << set menu item state( i, 0 )
);
My_OutlineBox << set menu item state( indexOfSelectedItem, 1 );
);
My_OutlineBox = Outline Box( "My OutlineBox",
Text Box( "Some stuff in the window" ),
<<SET menu="" script=""></SET>