Использование IndexOf внутри функции в RichTextBox

Мне сложно понять логику того, что я пытаюсь достичь. Что я пытаюсь сделать, так это выяснить, как я могу сделать «Событие» элементом автозаполнения, сохранив его - позже проверяя, существует ли он или неправильно написано.

Я использую C #.

Вот беглое объяснение:

Функция:

function Test(Event)
end

Теперь я хочу использовать:

if(richTextBox1.Text.IndexOf("Event"))
{ 
    // Store item via Auto Complete Item
}

После того, как он сохранен, я действительно не знаю, как получить другую часть функции. Например, насколько большой будет внутренняя часть функции, пока не достигнет «конечной» точки.

Скажем, вот большая часть функции:

function Test(Event)
    local k = 0
    if k == 0 then
        Event:SetValue(k)
    end
end

Теперь, как мне получить «Событие», если оно находится внутри оператора «если»? Могу ли я использовать LastIndexOf?

Для краткости:

  • Проверьте, существует ли «Событие».
  • Если «Событие» существует, сохраните его.
  • Как только «Событие» сохранено, мы можем убедиться, что внутри «функции» нет ошибок после того, как будет записан последний «конец».

Будем очень признательны за примеры или письменную документацию.


person user1729639    schedule 08.10.2012    source источник
comment
Не уверен, может ли это помочь или нет, но почему бы не создать сначала массив и каждый раз, когда вы запускаете эту функцию (Test (Event)), вы добавляете элемент в массив?   -  person Picrofo Software    schedule 08.10.2012
comment
Возможно, я ошибаюсь, но вы пытаетесь уловить все вхождения слова Event?   -  person keyboardP    schedule 08.10.2012
comment
Да, я пытаюсь получить слово «Событие» внутри «функции» и остановиться, как только будет распределен последний «конец». @Picrofo: Я действительно пробовал список, но я не могу понять, как остановиться, когда 'end' завершает функцию - потому что у вас есть несколько концов, если вы используете операторы 'if'.   -  person user1729639    schedule 08.10.2012
comment
Это помогает? stackoverflow.com/questions/2641326/   -  person keyboardP    schedule 08.10.2012
comment
@ user1729639 Извините, я не понял ваш последний комментарий.   -  person Picrofo Software    schedule 08.10.2012
comment
keyboardP: Спасибо. Я разберусь с этим! @Picrofo: Как ты этого не понимаешь? «Тест функции (Событие)», я хочу получить все внутри «функции», пока не достигнет «конца», чтобы закрыть «функцию», при этом пытаясь выяснить, не содержит ли «Событие» ошибки пользователя. Примеры есть в основном посте.   -  person user1729639    schedule 08.10.2012


Ответы (1)


Извините, я не уверен, для чего предназначена функция, приведенная ниже, и строки 2 и 3 функции ниже не должны быть там).

function Test(Event)
    local k = 0
    if k == 0 then
        Event:SetValue(k)
    end
end

Но если я правильно понимаю вас и ваше желание получить значение 'Event', вы должны использовать return как таковое ..

function Test(Event)
    local k = 0
    if k == 0 then
        Event:SetValue(k)
    end
    return Event;
end

Но, как я уже сказал, эта функция будет бесполезной, как показывает пример ниже:

local Event = "ham sandwich";
function Test(Event)
    local k = 0
    if k == 0 then
        Event = k
    end
    return Event;
end

print(Test(Event));
0

Это потому, что в вашей функции k всегда будет 0.

Я вернулся к этому спустя много времени после того, как написал это, и заметил, что на самом деле я не ответил на ваш вопрос !.

Вот функция, которая сохранит СОБЫТИЕ и передаст СОБЫТИЕ вам для использования после последнего «конца».

local eventArray = {};

Если мы объявили здесь 'eventArray' как локальный (не в функции или блоке кода), мы можем быть уверены, что к нему можно получить доступ в любом месте вашего кода.

function GetEvent(event)
    eventArray = eventArray or {};
    if ( event == nil ) then
        return;
    else
        table.insert(eventArray, event);
        return event;
    end
end

Поскольку функция возвращает значение, вы можете сделать это извне:

local event1 = GetEvent(event);

'event1' теперь будет содержать значение, которое было возвращено вашей функцией, и, конечно же, функция также сохранит его в таблице для дальнейшего использования, если потребуется.

Если вы хотите сохранить свои события, убедитесь, что ваша таблица существует сначала в начале вашей функции, то есть: eventArray = eventArray или {};

Это защищает от случайного удаления таблицы.

В коде написано: «таблица равна самой себе, но если ее не существует, то она равна таблице. Это безвредно, если ваша таблица существует, потому что она всегда принимает первое истинное выражение (которым в данном случае является «eventArray», который действительно существует).

Убедиться в том, что событие существует, на самом деле просто. Если событие не может иметь логическое значение, вы также можете использовать: if (not event) then

Я говорю это, потому что событие может существовать со значением false. Если бы это было так, и вы использовали if (not event), тогда он будет рассматривать это утверждение как истинное, потому что значение события ложно. Это потому, что false и nil - это не одно и то же, в отличие от некоторых языков.

Имейте в виду, что ложь и ложь - это не одно и то же. Первое - это логическое значение (истина или ложь), а второе - это просто строка текста, в которой написано «ложь» и обрабатывается как любая другая строка.

Но на всякий случай лучше всего использовать if (event == nil).

Использование return говорит функции просто остановиться прямо здесь, потому что нет смысла продолжать. Поэтому, если событие не существует, функция завершится преждевременно.

Хью

person Hugh    schedule 09.12.2012