Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Переход к следующему элементу формы из SpinEdit через Enter

на форме для перехода на следующий элемент формы используется такая процедурка:
procedure TMainForm.Key(var Msg: TWMKey);
begin
if not (ActiveControl is TButton) then
if Msg.Charcode = 13 then Msg.Charcode := 9;
inherited;
end;

Так вот при нажатии на Enter в любом элементе, кроме Spinedit переход на следующий элемент осуществляются успешно, но когда курсор попадает на Spinedit выполнение даже не передается в эту процедуру((
более того выполнение не поступает и в SpinEdit..KeyPress

с любым из значений MainForm.KeyPreView таже история(

куда глядеть подскажите..
Ответ: DarkMaster,

спасибо, пресскей я знаю
хотел понять, какого хрена :)
Вопрос: Запрет перехода на другие элементы формы, пока не будет заполнен TextBox

Подскажите пожалуйста как проще всего запретить переход на другие элементы формы пока не введен текст в определенный текстбокс.
Ответ: Что имеется ввиду под переходом? Пользовательское выделение элементов?
И не проще ли сделать след. образом:
всем элементам формы, кроме TextBox, в свойствах ставим для Enabled значение на False.
Потом в TextChanged TextBox'а пишем проверку типа
vb.net
1
2
3
4
5
If TextBox1.Text <> "" Then
'тут код разблокировки элементов
Else
'тут код блокировки элементов
End If
Вопрос: Обращение из класса к элементам формы

Добрый вечер, подскажите пожалуйста, как из класса обратиться к элементам формы(image, label и т.д.)
Ответ:
Сообщение от Вероникаа
Добрый вечер, подскажите пожалуйста, как из класса обратиться к элементам формы(image, label и т.д.)
1) Изменить(в свойствах) модификатор доступа элемента(Modifiers) на Public. (Обязательно!!)
2) Создать экземпляр класса формы например
C#
1
Form main = new Form
3) Затем через "main" обращаться к элементу
C#
1
2
main.Lable1.Text = "Отображаемый текст"
main.TextBox.Text = "Отображаемый текст"
Вопрос: Не происходит перехода из одной формы в другую

Добрый вечер! Вроде простецкая проблема, но никак не могу понять, в чем же ошибка... В общем, ситуация следующая. Хочу реализовать в своей проге переход из одной формы в другую, пишу следующий код:
C#
1
2
Form2 f = new Form2();
            f.Show();
Но в итоге происходит следующая ошибка (см.приложение). Подскажите, пожалуйста, в чем проблема.
Ответ: Попробуй воспользоваться этим кодом:

C#
1
2
3
4
Form1.ActiveForm.Hide(); // Откуда
Form2 f = new Form2();  //  Куда
f.ShowDialog();
Close();
И не забудь, создать обе формы
Вопрос: Переход с одной формы на вторую нажатием кнопки и вывод массива на вторую форму JavaFX

Здравствуйте! Нужно сделать вывод массива при переходе с одной формы на другую нажатием кнопки. Переход на вторую форму получился, но массив на нее не выводится, так как не может найти textArea1 если она находится в "outputs.fxml", выходит NullPointerException. Если переношу textArea1 из "outputs.fxml" в "sample.fxml" (то есть на 1-ю форму), то все работает нормально. Как правильно сделать вывод массива на 2-ю форму?
У меня 2 класса наследника Application (Main и ChildForm). Правильно ли это?
класс Main:
Кликните здесь для просмотра всего текста
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Form");
        primaryStage.setScene(new Scene(root, 700, 655));
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

sample.fxml (1-я форма):
Кликните здесь для просмотра всего текста
Код XML
1
2
3
4
5
6
7
8
9
10
 <HBox spacing="10" alignment="top_left" GridPane.columnIndex="0" GridPane.rowIndex="1">
<GridPane fx:controller="sample.MainForm"
...   
        <Button fx:id="input" layoutX="10.0" layoutY="10.0"
                mnemonicParsing="false"
                onAction="#inputButton"
                prefHeight="33.5" prefWidth="100.0"
                text="Input"/>
    </HBox>
</GridPane>

класс MainForm:
Кликните здесь для просмотра всего текста
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MainForm{
 @FXML
    private TextArea textArea1;
ChildForm ch=new ChildForm();
@FXML
    public void inputButton(){//кнопка на 1-й форме, с пом. которой переходим на 2-ю
        Stage primaryStage=new Stage();
        try {
            ch.start(primaryStage);
        } catch (Exception e) {
            e.printStackTrace();
        }
          for (int i = 0; i < m_O.length; i++){
          String s=textArea1.getText();
          s+=m_O[i];//m_O[i] - массив, который нужно вывести на вторую форму
          textArea1.setText(s);
        }
}

outputs.fxml(2-я форма):
Кликните здесь для просмотра всего текста
Код XML
1
2
3
4
5
6
<GridPane fx:controller="sample.MainForm"
          xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="0" vgap="10">
    <HBox spacing="10" alignment="top_left" GridPane.columnIndex="0" GridPane.rowIndex="0">
        <TextArea fx:id="textArea1" prefWidth="220" prefHeight="300"/>
    </HBox>
</GridPane>

класс ChildForm:
Кликните здесь для просмотра всего текста
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
public class ChildForm extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("outputs.fxml"));
        primaryStage.setTitle("Input");
        primaryStage.setScene(new Scene(root, 500, 655));
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}
Ответ: Visiterr,

я же уже тебе сказал, что ты рано полез в GUI.

Сообщение от Visiterr
Код Java(TM) 2 Platform Standard Edition 5.0
1
String s1 = getChildByID(root, textArea1.getId());
Какой String? Ты пробовал перевести название метода и подумать над тем, что оно означает? У тебя на форме строчки находятся или таки другие гуёвые компоненты?! То, что это компилится, говорит о том, что автор метода не особо заморачивался правильным типизированием через генерики.
Кликните здесь для просмотра всего текста
Код Java(TM) 2 Platform Standard Edition 5.0
1
TextArea ta = getChildByID(root, textArea1.getId());// тут может быть ClassCastException, если id неправильный


Идём далее, а за каким ... тебе метод, если у тебя уже есть ссылка на нужную тебе текстовую область?

Ты абстрагируйся от GUI и представь, что у тебя есть 2 разных класса, при вызове метода в одном, нужно изменить состояние в другом. Как ты это сделаешь? Как ответишь себе на этот вопрос, подумай как можно использовать этот подход в JavaFX.

И, чтобы 2 раза не вставать, пиши код руками, когда достигнешь просветления и будешь понимать, что происходит "за кадром" FXMLLoader.load(), тогда можешь пользоваться мышкотырканьем. Вот только, думаю, что оно тебе к тому моменту не потребуется.
Вопрос: Форма ввода: движение по элементам формы TAB-ом

Создал форму, в ней несколько TexBox, ComboBox и обычных Кнопок.
Для того чтобы оперативно и быстро вводить информацию очень удобно после ввода в один элемент, чтобы курсор передвигался автоматом в ввод значения в другом элементе формы, но.., в зависимости от порядка создания этих элементов в форме и создается порядок переходов - как изменить?
Можно ли изменить алгоритм?
Ответ: Поставил False, все выстроилось так как нужно, и фокус стал тоже на первый элемент!
Вопрос: Переход от одной формы к другой

Как сделать переход от одной формы к другой C#?
Переход как бы есть!
он очень медленный ,можно ли ускорить этот процесс?
Ответ:
Сообщение от FIGO
Переход как бы есть!
он очень медленный
Покажите какой у вас есть, посмотрим, чего он медленный.
Вопрос: Перебор элементов формы по индексам

Здравствуйте!
Возник вопрос следующего плана:
Можно ли перебрать элементы формы по индексам, т.е. допустим есть combobox1, combobox2.... comboboxN, tabcontrol1, tabcontrol2......tabcontrolN.
В форму где расположены эти элементы передается число, которое будет являться максимальным индексом для элементов.
И перед открытием формы мы перебираем эти элементы и заполняем в combobox значения
Примерно это должно выглядеть вот так
C#
1
2
3
4
for(int j = 1; j <= max; j++)
{
     combobox[j].SelectedIndex = 1;
}
Ответ: Разобрался и нашел свою ошибку!
В первой строке в типу tabPage привел, а во-второй строке обращался к контролам формы.

C#
1
2
tp = this.Controls["tabControl" + 1.ToString()].Controls["Stage" + 1.ToString()] as TabPage;
this.Controls["tabControl" + 1.ToString()].tabPages.remove(tp);
Всем большое спасибо за помощь!
Вопрос: Неправильное расположение элементов формы на другом ПК

Всем доброго времени суток. Пишу небольшой софт, но в нем важен красивый интерфейс. Использую MetroFramework ().
Проблема в том, что на моем ПК все элементы формы и сама форма отображается правильно, ничего не съезжает, все на своих местах. У других же все не так, почти все элементы не на своих местах, да и размер самой формы также не такой... Не понимаю, в чем проблема. Расположение элементам задаю в конструкторе (программа Windows Forms). Единственное решение, которое мне удалось найти, в процедуре загрузки формы задавать каждому элементу положение, но т.к элементов много, то это плохой вариант.
Всем заранее спасибо за помощь, надеюсь на Вас)

Добавлено через 7 часов 54 минуты
Кое-что нашел
Да, я действительно использую 125%, а не 100%... То есть самый простой вариант поставить 100%, помучиться, все элементы поставить нормально и скомпилировать?
Мне не очень нравится такой вариант, есть еще идеи?
Ответ:
Сообщение от n1lsik
Вот какие контролы есть
Негусто. Раз MetroFramework создан для Windows.Forms, то стандартные принципы размещения тоже могут работать. Anchoring и Docking спасают во многих ситуациях. Есть статья Криса Селлза об этом: (есть ещё и книга по формам от него).
Вопрос: Изменение информации в элементах формы из потоков

Не по теме:

в заголовке слово "проблема" заменено на "искусство", так как первое является запрещённым. о_О


Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
int a;
 
#pragma endregion
    private: System.Void MyForm_Load(System::Object^  sender, System::EventArgs^  e) {
                 backgroundWorker1->RunWorkerAsync();
    }
    private: System.Void backgroundWorker1_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
                 a++;
                 label1.Text = Convert.ToString(a);
                 System.Threading.Thread.Sleep(100);
    }

вылетает ошибка: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "label1" не из того потока, в котором он был создан."
низя тыкать label в backgroundworker-ах...

я хотел сделать такую схему, при которой вся работа происходит в потоках, а для изменения информации в элементах формы из потоков ссылалось всё в form_load и от туда без всяких invoke менялось:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool l1;
int a = 1;//"глобальные" переменные для всех потоков
private: System.Void MyForm_Load(System::Object^  sender, System::EventArgs^  e) {
                 backgroundWorker1->RunWorkerAsync();
                 for (;;){
                     if (l1 == true){
                         label1.Text = Convert.ToString(a);
                         l1 = false;
                     }
                     System.Threading.Thread.Sleep(1); //дабы не загружать ЦП
                 }
    }
private: System.Void backgroundWorker1_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
                 a++;
                 l1 = true;
                 System.Threading.Thread.Sleep(100);
    }

но, если в form_load программа не доходит до конца, то есть до "}", то есть из цикла она не вылезет, то форма (окно) просто не загружается, не прогружается, не отображается, есть только процесс в диспетчере задач (в принципе, form_load и подразумевает прогрузку формы). при таком раскладе моя схема не работает.

можно ли создать какой нибудь... ну... "int main()" или что то похожее на form_load, поток, который смог бы без invoke обрабатывать всякие labels и textboxes, поток, в который бы я ссылался?

не могу разобраться с invoke никак, вот уже всякие схемы придумываю.
Ответ: как записать эти коды в c++?:
C#
1
2
3
4
Dispatcher.BeginInvoke((Action)(() = >
                 {
                     label1->Text = "a = " + Convert::ToString(a);
                 }));
C#
1
2
3
4
5
Action action = () =>
    {
        label1->Text = "a = " + Convert::ToString(a);
    };
    Dispatcher.BeginInvoke(action);
и, кстати, Dispatcher - не определяется, если начинаю просто его вводить, как в примере выше:
C#
1
2
3
4
Dispatcher.BeginInvoke(new ThreadStart(delegate
                            {
                 label1.Text = Convert.ToString(a);                              
                                            }));
Добавлено через 11 часов 8 минут

Не по теме:

извинийте за тупость



Добавлено через 12 часов 2 минуты
оно работает!!! it's alive!!!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private: System::Void MyForm_Load(System::Object^  sender, System::EventArgs^  e) {
                 backgroundWorker1->RunWorkerAsync();
    }
 
    private: void lol(int i){
                 label1->Text = "dadad";
    }
 
    private: System::Void backgroundWorker1_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
                 int i;
                 a++;
                 Invoke(gcnew Action<int>(this, &MyForm::lol), i);
                 System::Threading::Thread::Sleep(100);
    }
int i присвоил, потому что без него не работает...

Добавлено через 17 часов 22 минуты
да, кстати, это c++...