Есть ли способ использовать EditorGUILayout.LabelField в EditorWindow внутри GUILayout.Button?

Увы, в 11g нам все равно придется использовать наши собственные токенизаторы PL / SQL, используя типы SQL. В 11gR2 Oracle предоставила нам агрегирующую функцию для объединения результатов в строку CSV, поэтому, возможно, в 12i они предоставят обратную возможность.

Если вы не хотите создавать тип SQL, вы можете использовать встроенный SYS.DBMS_DEBUG_VC2COLL, например:

create or replace function string_tokenizer
    (p_string in varchar2
        , p_separator in varchar2 := ',')
    return sys.dbms_debug_vc2coll
is
    return_value SYS.DBMS_DEBUG_VC2COLL;
    pattern varchar2(250);
begin

    pattern := '[^('''||p_separator||''')]+' ;

    select trim(regexp_substr (p_string, pattern, 1, level)) token
    bulk collect into return_value
    from dual
    where regexp_substr (p_string, pattern, 1, level) is not null
    connect by regexp_instr (p_string, pattern, 1, level) > 0;

    return return_value;

end string_tokenizer;
/

Здесь он находится в действии:

SQL> select * from table (string_tokenizer('one, two, three'))
  2  /

COLUMN_VALUE
----------------------------------------------------------------
one
two
three

SQL>

Подтверждение: этот код является вариантом кода I найденный в блоге Tanel Poder .

0
задан Dubi Duboni 18 March 2019 в 23:30
поделиться

1 ответ

Ваш вопрос немного неясен.

Если ваш вопрос только в том, возможно ли это или нет:

Нет! (по крайней мере, не так, как вы ожидаете)

что-нибудь в этом блоке: 118]

if (GUILayout.Button("Search"))
{
     ...
}

выполняется только в тот момент, когда кнопка фактически нажата.

1110 Итак, вы должны сделать это так, как вы уже это сделали. Возможно добавление дополнительной проверки для отображения только тех полей, если список не пуст:

// only show the button while the list is empty
if(gameobjecttest.Count == 0)
{
    if (GUILayout.Button("Search"))
    {
         ...
    }

    // skip the rest
    return;
}

// otherwise show the list
EditorGUILayout.BeginHorizontal();
{
    scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(300), GUILayout.Height(400));
    {
        foreach (GameObject go in gameobjecttest)
        {
            EditorGUILayout.LabelField(go.name);
        }
    }
    EditorGUILayout.EndScrollView();
}
EditorGUILayout.EndHorizontal();

(я обычно добавляю эти { } для очистки кода немного)

[1112 ] Или удерживайте кнопку, но вместо этого отключите ее

EditorGUI.BeginDisabledGroup(gameobjecttest.Count != 0);
{
    if (GUILayout.Button("Search"))
    {
         ...
    }
}
EditorGUI.EndDisabledGroup();
0
ответ дан derHugo 18 March 2019 в 23:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: