[ C# / Java ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by procedure, 2 Nov 2008.

  1. spkody

    spkody New Member

    Joined:
    28 Nov 2011
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    Вопрос с диалогами.
    Ситуация такая: есть главный Form1 и есть Form2, который вызывается как модальный. Далее с Form2 вызывается уже не модальный Form3, между 2 и 3 формами юзер имеет возможность переключатся и управлять ими, кроме Form1. По закрытию Form2, остается Form1 и Form3, которые тоже прекрасно управляются юзером. Если не закрывая Form3 вызвать опять модальный Form2, то блокируются 1 и 3 формы. Причем если с Form2 обратится к Form3, методом Activate(), то форма просто вылезет на передний фон, а контроль над ней будет не доступен. Переоткрывать Form3 как-то не красиво что ли...
    Вопрос заключается в том, как сделать так чтобы модальный диалог не блокировал все окна, кроме того с которого он запускается?
     
  2. mrazota

    mrazota New Member

    Joined:
    8 Dec 2011
    Messages:
    20
    Likes Received:
    1
    Reputations:
    0
    Вряд ли это возможно, специфика модального диалога такова. Могу посоветовать использовать всегда не модальный диалог, и блокировать контролы если они по логике в остальных формах должны быть недоступны.
     
  3. spkody

    spkody New Member

    Joined:
    28 Nov 2011
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    Спасибо. Я уже решил эту проблему через многопоточность, если по логике надо чтобы какаято форма не блокировалась модальным диалогом, ее необходимо запустить через Application.Run() в другом потоке. Как всегда решение было перед самым носом.
     
  4. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    >>ее необходимо запустить через Application.Run()
    в корне неверное решение, у вас что-то с формами напутано.
     
  5. spkody

    spkody New Member

    Joined:
    28 Nov 2011
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    предложите ваше решение...
     
  6. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    spkody - разобраться с формами, разобраться с логикой отображения.
     
  7. spkody

    spkody New Member

    Joined:
    28 Nov 2011
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    Если вы не знаете, лучше молчите!
    Простейший пример: проект с тремя формами. с Form1 вызовите Form2, через Show(). Не закрывая Form2, с Form1 вызовите Form3 через ShowDialog(). Как сделать так чтобы ранее вызванный Form2 не блокировался модальным Form3?
    По-мойму, вполне конкретный вопрос, а вы отсылаете разбираться с формами... указывая, что с логикой что-то не так... да тут элементарная логика, на пальцах объяснить можно.
     
  8. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    spkody, уважаемый, рот мне не стоит закрывать.
    У Вас явные проблемы с архитектурой, назовите мне dialy ПО которое себя так ведет?
    Получается проблемы с том, что, где и как показать, не правда ли?
     
  9. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    >>То что он может копировать файлы в отдельном от основного потока слышали... ну так вот это копирование не блокирует работу основного окна.

    facepalm... ужас...
    1. Модальные окна не блокируют работу основного потока.
    2. Поменяйте сборку, у Вас отсутствует кнопка - "В фоне"

    Проблема в том, что сначала запускается главное окно, поверх него модальное и должно работать еще 1 окно, причем не взирая на модальное.

    1. Где смысл модального окна?
    2. ShowDialog с параметром (принимает IWin32Window) - этот метод как раз таки и позволяет блокировать определенную форму, а не все. Именно оно нужно, но никак не Application.Run.

    Может быть стоит действительно прислушаться? Я все понимаю, амбиции, молодость и прочее, но здоровую критику никто не отменял.
     
  10. sssr1

    sssr1 New Member

    Joined:
    8 Dec 2011
    Messages:
    19
    Likes Received:
    2
    Reputations:
    0
    Начинаю интересоваться простым программированием и т.п. для реализации своих идей и замыслов по автоматизации работы ПК. Есть такой вопрос:
    есть ли русскоязычные билдеры программ в которых интерфейс позволит мне понять какую функцию и за чем я вставлю.
    есть знания ШТМЛ, немного очень ПШП, когда то начинал самостоятельно бейсик, тоесть о создании переменных и назначении им функций немного понимаю.
    Но вот интересует именно простое программирование с помощью русскоязычных и понятных интерфейсов и т.п.
     
  11. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    попробуйте http://hiasm.com/
     
  12. spkody

    spkody New Member

    Joined:
    28 Nov 2011
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    1. holyshit!! т.е. код после ShowDialog спокойно может исполнятся не дожидаясь пока диалог че-то там вернет? ...
    2. Никогда ей не пользовался -> всегда копирует в фоне, зачем мне эта кнопка... даже не жалею что ее нет.
    :confused: Ну надо так! понимаете, НА-ДО.
    Тот же TC: поставьте фоновое копирование, а потом еще раз вызовите диалог копирования F5 -> вот пока он у вас висит он блокирует контролы основного окна TC(нельзя с ним работать), но то копирование что было запущено можно отменить или приостановить -> его управление не заблокировано!

    > 1. Где смысл модального окна?
    Она нужно там где нужно, а не везде!

    > 2. ShowDialog с параметром (принимает IWin32Window) - этот метод как раз таки и позволяет блокировать определенную форму, а не все. Именно оно нужно, но никак не Application.Run.
    Пример пож-та в студию, я как не крутил этот owner так и не добился нужного эффекта. Про "позволяет блокировать определенную форму, а не все" не нагуглил ничего подобного.
    Вместо Application.Run(), можно использовать тот-же showdialog, но всеровно в другом потоке.

    Прислушиваться не к чему. Критиковать, не означает только обосрать, надо указать как должно быть. Через 3 поста вы выдавили про IWin32Window, а до этого отсылали рассматривать какие-то абстракции типо архитектура и т.д. Я все понимаю старость не в радость, высокомерие через край... но "здоровость" вашей критики под сомнением.

    Вот мой говнокод, так я вызываю окно которое не хочу блокировать модальностью других:

    Code:
            private Thread t;
            static private void thread_run()
            {
                Program.f3 = new Form3();
                Program.f3.ShowDialog();
            }
            public void show()
            {
                if (Program.f3 == null || t == null || (!Program.f3.loaded))
                {
                    t = new Thread(thread_run);
                    t.Start();
                }
                else 
                    Program.f3.Invoke(new ThreadStart(delegate() { Program.f3.Activate(); }));
            }
    
    
    Приведите ваш пример, с IWin32Window
     
  13. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    1. >>1. holyshit!! т.е. код после ShowDialog спокойно может исполнятся не дожидаясь пока диалог че-то там вернет? ...
    Советую вчитаться в ответ. Если не понятно, могу посоветовать сделать примерно так:
    1. Кинуть на форму таймер, написать обработчик события, который к примеру будет показывать текущее время вплоть до секунд, интервал - 1 секунду и запустить.
    2. Кинуть на ту же форму кнопку, которая будет открывать модальное окно (p.s. MessageBox то же самое окно, абсолютно)
    3. Нажать эту кнопку, дабы отобразилось модальное окно.


    2. >>2. Никогда ей не пользовался -> всегда копирует в фоне, зачем мне эта кнопка... даже не жалею что ее нет.
    Советую нажать, посмотреть что будет.

    Form1 - ButtonClick
    Form2 frm = new Form2();
    frm.ShowDialog(this) - будет модальным окном только для Form1.

    frm.ShowDialog() - будет модальным окном для всего приложения (грубо говоря для всех окон).

    Если этого не понятно, могу написать пример и залить/отправить/запостить исходники.
     
  14. spkody

    spkody New Member

    Joined:
    28 Nov 2011
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    в каком потоке генерируется собитие Timer_tick ?
    Code:
            private void button2_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                f2.ShowDialog(this);
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Form3 f3 = new Form3();
                f3.Show();
            }
    
    Нажмите сначала button1, а потом button2. Попробуйте закрыть Form3. Она вылазит на передний план если ее на таскбаре кликнуть, но контроль заблокирован!

    желаю!
     
  15. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    нет слов, одни эмоции =)))

    Code:
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                new Form2().ShowDialog(this);
            }
        }
    
    Code:
    public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                var f = new Form3();
                f.Show();
            }
        }
    
     
  16. spkody

    spkody New Member

    Joined:
    28 Nov 2011
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    В самом деле! Ваш код не решает задачи, и вы это прекрасно знаете!
     
  17. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    советую книги почитать, а то в голове совсем пусто.
     
  18. spkody

    spkody New Member

    Joined:
    28 Nov 2011
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    ага, это как в универе - типичная отмазка препода, который чувствует свою не компетентность, но не хочет этого показать. В вашем случае, вы уже все показали - так что поздно отмазываться и самое время последовать своему же совету.
    А на будущее, если вы чего то не знаете - молчите! Ваши бесплатные советы про "пойти почитать книги" никому даром не нужны.
     
  19. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    какой-то недотролль...
    иди учись, малыш.

    http://www.sendspace.com/file/colx5s
     
    #1199 W!z@rD, 16 Dec 2011
    Last edited: 16 Dec 2011
  20. horlyk

    horlyk Elder - Старейшина

    Joined:
    2 Dec 2007
    Messages:
    132
    Likes Received:
    6
    Reputations:
    0
    Ребята, подскажите пожалуйста, как заставить с шарпе numericUpDown выводить значения до 10 с нулем впереди. Например не 1, а 01, 02 и т.д.
    Есть ли какой-то параметр или еще что-то?
     
Loading...
Similar Threads - Java начинающим задаем
  1. b3
    Replies:
    4
    Views:
    3,205