none
Закладки в веб-браузере! RRS feed

  • Вопрос

  • Мне нужно зделать работу с закладками в своём веб-браузере, но я не знаю как это сделать. Каждая новая mdi-форма это новая закладка. Как мне зделать что бы та которая была активна с ней и ишла работа.

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 22:56 MSDN Forums consolidation (От:Visual C#)
    31 января 2010 г. 18:59

Ответы

  • Воспользуйтесь статическим свойством Form.ActiveForm, которое возвращает активную в данный момент форму для текущего приложения.

    if(Form.ActiveForm is MyForm)
    {
        ((MyForm)Form.ActiveForm).WebBrowser.Navigate(comboBox1.Text);
    }

    Естесственно ваш контрол WebBrowser должен быть объявлен открытым, ну или открытое свойство, которое будет возвращать его

    public class MyForm: Form
    {
        public MyForm()
        {
        }

       private WebBrowser browser;
      public WebBrowser
      {
        get { return browser; }
      }
    }
    2 февраля 2010 г. 10:54
  • public WebBrowser Browser
    {
          get {return browser;}
    }
    3 февраля 2010 г. 14:30
  • используйте

    this.ActiveMdiChild

    вместо

    Form.ActiveForm

    3 февраля 2010 г. 15:23
  • //Form1.cs - содержит кнопку button1, toolStrip1 с toolStripComboBox1 и toolStripButton1
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            //открываем две mdi формы
            PageWeb f1 = new PageWeb();
            f1.MdiParent = this;
            f1.Show();
    
            PageWeb f2 = new PageWeb();
            f2.MdiParent = this;
            f2.Show();
        }
    
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            //щелкаем на кнопке toolStripButton1 (кнопка "Enter")
            //открываем соответствующий адрес из toolStripComboBox1.Text в активной mdi форме
            if (this.ActiveMdiChild is PageWeb)
            {
                ((PageWeb)this.ActiveMdiChild).myWebBrowser.Navigate(toolStripComboBox1.Text);
            }
        }
    }
    
    //PageWeb.cs - содержит элемент webBrowser1
    public partial class PageWeb : Form
    {
        public PageWeb()
        {
            InitializeComponent();
        }
    
        public WebBrowser myWebBrowser
        {
            get { return webBrowser1; }
        }
    }
    
    

    3 февраля 2010 г. 16:04
  • добавьте следующий обработчик и выполните в нем соответствующие действия:

    //PageWeb.cs
    public PageWeb()
    {
        InitializeComponent();
        webBrowser1.NewWindow += new CancelEventHandler(webBrowser1_NewWindow);
    }
    
    void webBrowser1_NewWindow(object sender, CancelEventArgs e)
    {
        PageWeb f1 = new PageWeb();//новое окно
        f1.MdiParent = this.MdiParent;//такой же родитель
        myControls mc = new myControls(f1, ((Form1)this.MdiParent).ToolStrip1);//добавляем кнопки (для вашего случая:)
        f1.Show();//открываем
        f1.webBrowser1.Navigate(webBrowser1.StatusText.ToString());//переходим на страницу
        e.Cancel = true;
    }
    
    //Form1.cs
    public ToolStrip ToolStrip1
    {
        get { return this.toolStrip1; }
    }
    

    6 февраля 2010 г. 14:15
  • прост наверн у вас класс myControls расположен в классе Form1, можно поступить следующим образом:

    //Form1.cs
    //...
    public partial class Form1 : Form
    {
    //...
    }
    
    private class myControls
    {
    //...
    }
    
    
    //PageWeb.cs
    //...
    public partial class PageWeb : Form
    {
    //...
    }

    или можете поместить класс myControls в отдельный файл в тот же namespace

    6 февраля 2010 г. 14:43
  • у мня уже и идей нет почему у вас не получается:)

    но если хотите чтоб у вас класс Form1 содержал класс myControls, то сделайте класс myControls как public и обращайтесь к нему во второй форме через Form1.myControls:

    //Form1.cs
    //...
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        //...
    
        public class myControls
        {
            //...
        }
    }
    
    //PageWeb.cs
    //...
    public partial class PageWeb : Form
    {
        public PageWeb()
        {
            InitializeComponent();
            webBrowser1.NewWindow += new CancelEventHandler(webBrowser1_NewWindow);
        }
    
        void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            PageWeb f1 = new PageWeb();//новое окно
            f1.MdiParent = this.MdiParent;//такой же родитель
            Form1.myControls mc = new Form1.myControls(f1, ((Form1)this.MdiParent).ToolStrip1);//добавляем кнопки (для вашего случая:)
            f1.Show();//открываем
            f1.webBrowser1.Navigate(webBrowser1.StatusText.ToString());//переходим на страницу
            e.Cancel = true;
        }
        //...
    }

    6 февраля 2010 г. 15:21
  • это у вас изза NullReferenceException (ссылка на несуществующий объект) в Life_Green.Form1.timer1_Tick:
    System.NullReferenceException: Object reference not set to an instance of an object.
       at Life_Green.Form1.timer1_Tick(Object sender, EventArgs e) in D:\USR Spaesowt\Проэкты\СП\Microsoft C#\Life Green\Life Green\Life Green\Form1.cs:line 135

    посмотрите что у вас на 135 строчке в Form1.cs

    пс:у мня ие не открывается
    псс:если не разберетесь, приведите код, посмотрим:)

    6 февраля 2010 г. 16:09
  • затестить не могу:( сижу на xp
    попробуйте поставить e.Cancel = true ; перед созданием новой формы в webBrowser1_NewWindow, мож поможет

    можете посмотреть еще этот тред

    6 февраля 2010 г. 16:25
  • Этот код не зависит от количества вкладок :)
    19 февраля 2010 г. 18:43
  • В том-то и дело, что это не должно зависеть от количество вкладок! Я такой код уже давно написал:)

    Есть ещё идеи?

    Вы даже и не попробовали:(
    Там не зависит от количества вкладок, прост не было проверки что именно первый контрол в Controls вкладки есть WebBrowser.
    Следующий код не вызовет рантайм ошибки:

    private void toolStripComboBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            if (tabControl1.SelectedTab != null)
            {
                foreach (Control c in tabControl1.SelectedTab.Controls)
                {
                    if (c is WebBrowser)
                    {
                        ((WebBrowser)c).Navigate(toolStripComboBox1.Text);
                        break;
                    }
                }
            }
        }
    }
    


    • Помечено в качестве ответа Серый Науменко 19 февраля 2010 г. 18:52
    • Изменено Andrey Revin 19 февраля 2010 г. 18:55 Добавил проверку существования текущей вкладки
    19 февраля 2010 г. 18:44
  • попробуйте так:)

    private void toolStripButton1_Click(object sender, EventArgs e)
    {
        TabPage newTab = new TabPage("Tab " + tabControl1.TabPages.Count + 1);
        tabControl1.TabPages.Add(newTab);
        WebBrowser wb = new WebBrowser();
        wb.DocumentTitleChanged += new EventHandler(wb_DocumentTitleChanged);
        wb.Navigated += new WebBrowserNavigatedEventHandler(wb_Navigated);
        wb.ProgressChanged += new WebBrowserProgressChangedEventHandler(wb_ProgressChanged);
        wb.NewWindow += new CancelEventHandler(wb_NewWindow);//Событие открытия нового окна
        wb.Dock = DockStyle.Fill;
        wb.Navigate(toolStripComboBox1.Text);
        newTab.Controls.Add(wb);
        //...
    }
    
    void wb_NewWindow(object sender, CancelEventArgs e)
    {
        e.Cancel = true;
    
        //Создаем новую вкладку
        TabPage newTab = new TabPage("Tab " + tabControl1.TabPages.Count + 1);
        tabControl1.TabPages.Add(newTab);
        WebBrowser wb = new WebBrowser();
        wb.DocumentTitleChanged += new EventHandler(wb_DocumentTitleChanged);
        wb.Navigated += new WebBrowserNavigatedEventHandler(wb_Navigated);
        wb.ProgressChanged += new WebBrowserProgressChangedEventHandler(wb_ProgressChanged);
        wb.NewWindow += new CancelEventHandler(wb_NewWindow);
        wb.Dock = DockStyle.Fill;
        wb.Navigate(((WebBrowser)sender).StatusText.ToString());//переходим на страницу
        newTab.Controls.Add(wb);
        //...
    }

    20 февраля 2010 г. 10:10

Все ответы

  • Опишите поподробней, что вы пытаетесь сделать, и с каким браузером.
    - Dmitri Nesteruk
    1 февраля 2010 г. 8:29
  • Пишу свой веб-браузер. Остановился на проблеме вкладок. Как сделать вкладки в своей программе. Я думал что каждая новая вкладка это новая mdi-форма с webBrowser но как сделать так что бы та которая mdi была активна с ней и ишла работа? Ну как в обычном IE8 есть вкладки.

    У меня есть Form1 на ней comboBox1 и button1. Мы нажимаем дважды на button1 и открывается две mdi-формы в которых есть webBrowser1. Как мне зделать что бы в зависимости от того какая mdi-форма была активна элемент comboBox1 влиял на webBrowser той mdi которая активна. Функция comboBox1:

    webBrowser1.Navigate(comboBox1.Text);

    Надеюсь теперь понятно?

    1 февраля 2010 г. 10:10
  • Воспользуйтесь статическим свойством Form.ActiveForm, которое возвращает активную в данный момент форму для текущего приложения.

    if(Form.ActiveForm is MyForm)
    {
        ((MyForm)Form.ActiveForm).WebBrowser.Navigate(comboBox1.Text);
    }

    Естесственно ваш контрол WebBrowser должен быть объявлен открытым, ну или открытое свойство, которое будет возвращать его

    public class MyForm: Form
    {
        public MyForm()
        {
        }

       private WebBrowser browser;
      public WebBrowser
      {
        get { return browser; }
      }
    }
    2 февраля 2010 г. 10:54
  • Что то тут не правельно?

    public WebBrowser
    {
          get {return browser;}
    }

    3 февраля 2010 г. 14:22
  • public WebBrowser Browser
    {
          get {return browser;}
    }
    3 февраля 2010 г. 14:30
  • Всеравно не получается!

    3 февраля 2010 г. 14:49
  • Что именно?
    3 февраля 2010 г. 14:57
  • Неоткрывается страница в webBrowser1 который находится в mdi-форме.

    3 февраля 2010 г. 15:15
  • используйте

    this.ActiveMdiChild

    вместо

    Form.ActiveForm

    3 февраля 2010 г. 15:23
  • Нечего не помагает! Наверное я туплю и гдето ошибся. Можите всё пожалуста написать на моём примери.

    Основная форма Form1 на которой toolStripComboBox1 и button. При нажатии button1 открывается mdi-форма PageWeb в которой находится webBrowser1. Ну и естественно при нажатии кнопки Enter в toolStripComboBox1 в webBrowser1 открывается страница в зависимости от того какая mdi-форма выделена.
    3 февраля 2010 г. 15:45
  • //Form1.cs - содержит кнопку button1, toolStrip1 с toolStripComboBox1 и toolStripButton1
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            //открываем две mdi формы
            PageWeb f1 = new PageWeb();
            f1.MdiParent = this;
            f1.Show();
    
            PageWeb f2 = new PageWeb();
            f2.MdiParent = this;
            f2.Show();
        }
    
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            //щелкаем на кнопке toolStripButton1 (кнопка "Enter")
            //открываем соответствующий адрес из toolStripComboBox1.Text в активной mdi форме
            if (this.ActiveMdiChild is PageWeb)
            {
                ((PageWeb)this.ActiveMdiChild).myWebBrowser.Navigate(toolStripComboBox1.Text);
            }
        }
    }
    
    //PageWeb.cs - содержит элемент webBrowser1
    public partial class PageWeb : Form
    {
        public PageWeb()
        {
            InitializeComponent();
        }
    
        public WebBrowser myWebBrowser
        {
            get { return webBrowser1; }
        }
    }
    
    

    3 февраля 2010 г. 16:04
  • Блин! Вот это я придурок! Я делал всё правельно... просто не туда вставил код! Извеняюсь я просто сильно устал. Всем спосибо!
    3 февраля 2010 г. 16:10
  • Я например когда я в Google-е в поиске нажимаю на ссылку, то она открывается в IE в новом окне, а как мне сделать что бы она открывалась в новом окне mdi-формы, а не в IE?
    6 февраля 2010 г. 13:18
  • добавьте следующий обработчик и выполните в нем соответствующие действия:

    //PageWeb.cs
    public PageWeb()
    {
        InitializeComponent();
        webBrowser1.NewWindow += new CancelEventHandler(webBrowser1_NewWindow);
    }
    
    void webBrowser1_NewWindow(object sender, CancelEventArgs e)
    {
        PageWeb f1 = new PageWeb();//новое окно
        f1.MdiParent = this.MdiParent;//такой же родитель
        myControls mc = new myControls(f1, ((Form1)this.MdiParent).ToolStrip1);//добавляем кнопки (для вашего случая:)
        f1.Show();//открываем
        f1.webBrowser1.Navigate(webBrowser1.StatusText.ToString());//переходим на страницу
        e.Cancel = true;
    }
    
    //Form1.cs
    public ToolStrip ToolStrip1
    {
        get { return this.toolStrip1; }
    }
    

    6 февраля 2010 г. 14:15
  • Вопрос нащёт myControls у меня ошибка.
    6 февраля 2010 г. 14:25
  • здесь то у вас myControls - это класс который добавляет две кнопки на toolStrip (myControls )
    что за ошибка?)
    6 февраля 2010 г. 14:30
  • Да обычная:
    Error 1 The type or namespace name 'myControls' could not be found (are you missing a using directive or an assembly reference?) D:\USR Spaesowt\Проэкты\СП\Microsoft C#\Life Green\Life Green\Life Green\PageWeb.cs 36 13 Life Green
    6 февраля 2010 г. 14:33
  • Я понял просто нужна на него ссылка на Form1.
    6 февраля 2010 г. 14:34
  • прост наверн у вас класс myControls расположен в классе Form1, можно поступить следующим образом:

    //Form1.cs
    //...
    public partial class Form1 : Form
    {
    //...
    }
    
    private class myControls
    {
    //...
    }
    
    
    //PageWeb.cs
    //...
    public partial class PageWeb : Form
    {
    //...
    }

    или можете поместить класс myControls в отдельный файл в тот же namespace

    6 февраля 2010 г. 14:43
  • Я не хочу это делать вторым способом, а первый не получается. Может сделать както ссылку на Form1? Например:
    Form1 _Form1 = new From1();
    _Form1.myControls.

    6 февраля 2010 г. 14:53
  • у мня уже и идей нет почему у вас не получается:)

    но если хотите чтоб у вас класс Form1 содержал класс myControls, то сделайте класс myControls как public и обращайтесь к нему во второй форме через Form1.myControls:

    //Form1.cs
    //...
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        //...
    
        public class myControls
        {
            //...
        }
    }
    
    //PageWeb.cs
    //...
    public partial class PageWeb : Form
    {
        public PageWeb()
        {
            InitializeComponent();
            webBrowser1.NewWindow += new CancelEventHandler(webBrowser1_NewWindow);
        }
    
        void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            PageWeb f1 = new PageWeb();//новое окно
            f1.MdiParent = this.MdiParent;//такой же родитель
            Form1.myControls mc = new Form1.myControls(f1, ((Form1)this.MdiParent).ToolStrip1);//добавляем кнопки (для вашего случая:)
            f1.Show();//открываем
            f1.webBrowser1.Navigate(webBrowser1.StatusText.ToString());//переходим на страницу
            e.Cancel = true;
        }
        //...
    }

    6 февраля 2010 г. 15:21
  • А вот теперь... БОЛЬШОЕ СПОСИБО! :)
    6 февраля 2010 г. 15:37
  • У меня при таком переходе всеровно открывается IE и выдаёт вот такую ошибку:
    See the end of this message for details on invoking
    just-in-time (JIT) debugging instead of this dialog box.

    ************** Exception Text **************
    System.NullReferenceException: Object reference not set to an instance of an object.
       at Life_Green.Form1.timer1_Tick(Object sender, EventArgs e) in D:\USR Spaesowt\Проэкты\СП\Microsoft C#\Life Green\Life Green\Life Green\Form1.cs:line 135
       at System.Windows.Forms.Timer.OnTick(EventArgs e)
       at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    ************** Loaded Assemblies **************
    mscorlib
        Assembly Version: 4.0.0.0
        Win32 Version: 4.0.21006.1 (B2Rel.021006-0100)
        CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.21006/mscorlib.dll
    ----------------------------------------
    Life Green
        Assembly Version: 1.0.0.0
        Win32 Version: 1.0.0.0
        CodeBase: file:///D:/USR%20Spaesowt/Проэкты/СП/Microsoft%20C%23/Life%20Green/Life%20Green/Life%20Green/bin/Debug/Life%20Green.exe
    ----------------------------------------
    System.Windows.Forms
        Assembly Version: 4.0.0.0
        Win32 Version: 4.0.21006.1 built by: B2Rel
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
        Assembly Version: 4.0.0.0
        Win32 Version: 4.0.21006.1 built by: B2Rel
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System
        Assembly Version: 4.0.0.0
        Win32 Version: 4.0.21006.1 built by: B2Rel
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Configuration
        Assembly Version: 4.0.0.0
        Win32 Version: 4.0.21006.1 (B2Rel.021006-0100)
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Xml
        Assembly Version: 4.0.0.0
        Win32 Version: 4.0.21006.1 built by: B2Rel
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    Accessibility
        Assembly Version: 4.0.0.0
        Win32 Version: 4.0.21006.1 built by: B2Rel
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
    ----------------------------------------
    Microsoft.mshtml
        Assembly Version: 7.0.3300.0
        Win32 Version: 7.0.3300.0
        CodeBase: file:///C:/Windows/assembly/GAC/Microsoft.mshtml/7.0.3300.0__b03f5f7f11d50a3a/Microsoft.mshtml.dll
    ----------------------------------------

    ************** JIT Debugging **************
    To enable just-in-time (JIT) debugging, the .config file for this
    application or computer (machine.config) must have the
    jitDebugging value set in the system.windows.forms section.
    The application must also be compiled with debugging
    enabled.

    For example:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>

    When JIT debugging is enabled, any unhandled exception
    will be sent to the JIT debugger registered on the computer
    rather than be handled by this dialog box.

    6 февраля 2010 г. 15:51
  • это у вас изза NullReferenceException (ссылка на несуществующий объект) в Life_Green.Form1.timer1_Tick:
    System.NullReferenceException: Object reference not set to an instance of an object.
       at Life_Green.Form1.timer1_Tick(Object sender, EventArgs e) in D:\USR Spaesowt\Проэкты\СП\Microsoft C#\Life Green\Life Green\Life Green\Form1.cs:line 135

    посмотрите что у вас на 135 строчке в Form1.cs

    пс:у мня ие не открывается
    псс:если не разберетесь, приведите код, посмотрим:)

    6 февраля 2010 г. 16:09
  • Ошибку убрал пока удалив таймер, но IE8 открывается. Наверное из-за того что у меня Windows 7.
    6 февраля 2010 г. 16:15
  • затестить не могу:( сижу на xp
    попробуйте поставить e.Cancel = true ; перед созданием новой формы в webBrowser1_NewWindow, мож поможет

    можете посмотреть еще этот тред

    6 февраля 2010 г. 16:25
  • Спс! :)

    6 февраля 2010 г. 16:42
  • Мне нужно создать такое условие. У меня есть tabControl1 и comboBox1. В комбо бокс введён адрес страницы. При нажатии кнопки button1(Text = "Создать вкладку"), создаётся новая вкладка и на ней веб-браузер(Name = "wb").

    Вот код, что бы не было вопросов:

    TabPage newTab = new TabPage("Tab " + tabControl1.TabPages.Count + 1);
                tabControl1.TabPages.Add(newTab);
                WebBrowser wb = new WebBrowser();
                wb.DocumentTitleChanged += new EventHandler(wb_DocumentTitleChanged);
                wb.Navigated += new WebBrowserNavigatedEventHandler(wb_Navigated);
                wb.ProgressChanged += new WebBrowserProgressChangedEventHandler(wb_ProgressChanged);
                wb.Dock = DockStyle.Fill;
                wb.Navigate(toolStripComboBox1.Text);
                newTab.Controls.Add(wb);
    
                // Add thumbnail toolbar buttons
                TaskbarManager.Instance.ThumbnailToolbars.AddButtons(newTab.Handle, thumbButtonBack, thumbButtonForward, thumbButtonRefresh);
    
                // Add a new preview
                TabbedThumbnail preview = new TabbedThumbnail(this.Handle, newTab.Handle);
    
                // Event handlers for this preview
                preview.TabbedThumbnailActivated += new EventHandler<TabbedThumbnailEventArgs>(preview_TabbedThumbnailActivated);
                preview.TabbedThumbnailClosed += new EventHandler<TabbedThumbnailEventArgs>(preview_TabbedThumbnailClosed);
                preview.TabbedThumbnailMaximized += new EventHandler<TabbedThumbnailEventArgs>(preview_TabbedThumbnailMaximized);
                preview.TabbedThumbnailMinimized += new EventHandler<TabbedThumbnailEventArgs>(preview_TabbedThumbnailMinimized);
    
                TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(preview);
    
                // Select the tab in the application UI as well as taskbar tabbed thumbnail list
                tabControl1.SelectedTab = newTab;
                TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(tabControl1.SelectedTab);
    
                // set false for this new webbrowser
                scrollEventAdded = false;
    
                //
                закрытьВкладкуToolStripMenuItem.Enabled = true;

    Что мне нужно сделать? Да самое простое:) Так как на каждой вкладки которая создаётся, есть веб-браузер с названием wb. Мне нужно что бы когда я ввожу в comboBox1 адрес и нажимаю Enter, то в зависимости от того какая вкладка открыта, сробатывал только тот wb который находится на активной вкладке:) То есть переходит по адресу тому который указан в comboBox1.

    19 февраля 2010 г. 18:02
  • Попробуйте так:

    private void toolStripComboBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            ((WebBrowser)tabControl1.SelectedTab.Controls[0]).Navigate(toolStripComboBox1.Text);//Если WebBrowser будет единственным контролом TabPage'а
        }
    }
    


    19 февраля 2010 г. 18:34
  • В том-то и дело, что это не должно зависеть от количество вкладок! Я такой код уже давно написал:)

    Есть ещё идеи?

    19 февраля 2010 г. 18:39
  • Этот код не зависит от количества вкладок :)
    19 февраля 2010 г. 18:43
  • В том-то и дело, что это не должно зависеть от количество вкладок! Я такой код уже давно написал:)

    Есть ещё идеи?

    Вы даже и не попробовали:(
    Там не зависит от количества вкладок, прост не было проверки что именно первый контрол в Controls вкладки есть WebBrowser.
    Следующий код не вызовет рантайм ошибки:

    private void toolStripComboBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            if (tabControl1.SelectedTab != null)
            {
                foreach (Control c in tabControl1.SelectedTab.Controls)
                {
                    if (c is WebBrowser)
                    {
                        ((WebBrowser)c).Navigate(toolStripComboBox1.Text);
                        break;
                    }
                }
            }
        }
    }
    


    • Помечено в качестве ответа Серый Науменко 19 февраля 2010 г. 18:52
    • Изменено Andrey Revin 19 февраля 2010 г. 18:55 Добавил проверку существования текущей вкладки
    19 февраля 2010 г. 18:44
  • Спосибо! А не пробовал я потому, что щас у меня и так много работы:)Просто завалился:)
    19 февраля 2010 г. 18:53
  • [offtop]Серый Науменко практически формирует список самых активных участников за месяц :)))[/offtop]
    19 февраля 2010 г. 18:56
  • [offtop]PashaPash, я стараюсь:) И тем более, если есть вопросы почему бы их не задать тут:)[/offtop]
    19 февраля 2010 г. 19:03
  • А как в моё случае устранить проблему newWindow? wb в условии только будет создаваться. Мы уже разглядывали выше эту проблему, только то было когда у меня ещё mdi-формы были:)
    20 февраля 2010 г. 9:39
  • попробуйте так:)

    private void toolStripButton1_Click(object sender, EventArgs e)
    {
        TabPage newTab = new TabPage("Tab " + tabControl1.TabPages.Count + 1);
        tabControl1.TabPages.Add(newTab);
        WebBrowser wb = new WebBrowser();
        wb.DocumentTitleChanged += new EventHandler(wb_DocumentTitleChanged);
        wb.Navigated += new WebBrowserNavigatedEventHandler(wb_Navigated);
        wb.ProgressChanged += new WebBrowserProgressChangedEventHandler(wb_ProgressChanged);
        wb.NewWindow += new CancelEventHandler(wb_NewWindow);//Событие открытия нового окна
        wb.Dock = DockStyle.Fill;
        wb.Navigate(toolStripComboBox1.Text);
        newTab.Controls.Add(wb);
        //...
    }
    
    void wb_NewWindow(object sender, CancelEventArgs e)
    {
        e.Cancel = true;
    
        //Создаем новую вкладку
        TabPage newTab = new TabPage("Tab " + tabControl1.TabPages.Count + 1);
        tabControl1.TabPages.Add(newTab);
        WebBrowser wb = new WebBrowser();
        wb.DocumentTitleChanged += new EventHandler(wb_DocumentTitleChanged);
        wb.Navigated += new WebBrowserNavigatedEventHandler(wb_Navigated);
        wb.ProgressChanged += new WebBrowserProgressChangedEventHandler(wb_ProgressChanged);
        wb.NewWindow += new CancelEventHandler(wb_NewWindow);
        wb.Dock = DockStyle.Fill;
        wb.Navigate(((WebBrowser)sender).StatusText.ToString());//переходим на страницу
        newTab.Controls.Add(wb);
        //...
    }

    20 февраля 2010 г. 10:10
  • А какая ссылка на CancelEventHandler?
    20 февраля 2010 г. 10:26
  • Всё, спасибо A.Revin! Вот ссылка:

    using System.ComponentModel;

    20 февраля 2010 г. 10:57
  • А и ещё при этом коде новая вкладка есть, всё норм, только вот такая ошибка:

    See the end of this message for details on invoking
    just-in-time (JIT) debugging instead of this dialog box.

    ************** Exception Text **************
    System.ArgumentException: The given control has not been added to the taskbar.
    at Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailManager.SetActiveTab(IntPtr windowHandle) in D:\USR Spaesowt\Проэкты\СП\Microsoft C#\Life Green Org\WindowsAPICodePack\Shell\Taskbar\TabbedThumbnailManager.cs:line 241
    at Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailManager.SetActiveTab(Control control) in D:\USR Spaesowt\Проэкты\СП\Microsoft C#\Life Green Org\WindowsAPICodePack\Shell\Taskbar\TabbedThumbnailManager.cs:line 256
    at Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo.Form1.tabControl1_SelectedIndexChanged(Object sender, EventArgs e) in D:\USR Spaesowt\Проэкты\СП\Microsoft C#\Life Green Org\Life Green\Form1.cs:line 351
    at System.Windows.Forms.TabControl.OnSelectedIndexChanged(EventArgs e)
    at System.Windows.Forms.TabControl.WmSelChange()
    at System.Windows.Forms.TabControl.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    ************** Loaded Assemblies **************
    mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
    ----------------------------------------
    TabbedThumbnailDemoWinforms
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///D:/USR%20Spaesowt/Проэкты/СП/Microsoft%20C%23/Life%20Green%20Org/Life%20Green/bin/Debug/TabbedThumbnailDemoWinforms.exe
    ----------------------------------------
    Microsoft.WindowsAPICodePack.Shell
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///D:/USR%20Spaesowt/Проэкты/СП/Microsoft%20C%23/Life%20Green%20Org/Life%20Green/bin/Debug/Microsoft.WindowsAPICodePack.Shell.DLL
    ----------------------------------------
    System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    Microsoft.WindowsAPICodePack
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///D:/USR%20Spaesowt/Проэкты/СП/Microsoft%20C%23/Life%20Green%20Org/Life%20Green/bin/Debug/Microsoft.WindowsAPICodePack.DLL
    ----------------------------------------
    System.Configuration
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    WindowsBase
    Assembly Version: 3.0.0.0
    Win32 Version: 3.0.6920.4902 built by: NetFXw7
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/WindowsBase/3.0.0.0__31bf3856ad364e35/WindowsBase.dll
    ----------------------------------------
    PresentationCore
    Assembly Version: 3.0.0.0
    Win32 Version: 3.0.6920.4902 built by: NetFXw7
    CodeBase: file:///C:/Windows/assembly/GAC_32/PresentationCore/3.0.0.0__31bf3856ad364e35/PresentationCore.dll
    ----------------------------------------
    PresentationFramework
    Assembly Version: 3.0.0.0
    Win32 Version: 3.0.6920.4902 built by: NetFXw7
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/PresentationFramework/3.0.0.0__31bf3856ad364e35/PresentationFramework.dll
    ----------------------------------------
    System.Core
    Assembly Version: 3.5.0.0
    Win32 Version: 3.5.30729.4926 built by: NetFXw7
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Core/3.5.0.0__b77a5c561934e089/System.Core.dll
    ----------------------------------------
    Accessibility
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
    ----------------------------------------
    Microsoft.mshtml
    Assembly Version: 7.0.3300.0
    Win32 Version: 7.0.3300.0
    CodeBase: file:///C:/Windows/assembly/GAC/Microsoft.mshtml/7.0.3300.0__b03f5f7f11d50a3a/Microsoft.mshtml.dll
    ----------------------------------------

    ************** JIT Debugging **************
    To enable just-in-time (JIT) debugging, the .config file for this
    application or computer (machine.config) must have the
    jitDebugging value set in the system.windows.forms section.
    The application must also be compiled with debugging
    enabled.

    For example:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    When JIT debugging is enabled, any unhandled exception
    will be sent to the JIT debugger registered on the computer
    rather than be handled by this dialog box.

    20 февраля 2010 г. 11:02
  • Всё, спасибо! Протупил! Там нужно ещё код добавить :)
    20 февраля 2010 г. 12:44