Crie um projeto Windows Form e coloque um componente Web Browser nele. Note que ele ocupa todo o formulário, para isso, clique na setinha e em Desencaixar do Contâiner Pai, ocupe quase todo o frame deixando um espacinho acima, e mude o Dock para Bottom. Mude o name dele para brPrinc.
Acima do WebBrowser, coloque um componente textBox e os botões Ir, Home, Voltar, Próximo, Parar, Atualizar, Pesquisar e Definir Home. Altere os names deles.
Dentro da classe, crie esse método:
private void navegar() {
if(!txtUrl.Text.Trim().Equals("")) {
brPrinc.Navigate(txtUrl.Text.Trim());
}
else {
MessageBox.Show("Digite algo na URL!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtUrl.Focus();
}
}
Aí é só adicionar esse método no evento click do botão Ir, e no evento KeyDown do txtUrl, coloque isso:
private void txtUrl_KeyDown(object sender, KeyEventArgs e) {
if(e.KeyCode == Keys.Enter) {
navegar();
}
}
No evento de Home, coloque isso:
private void btnHome_Click(object sender, EventArgs e) {
// Crie uma variável local de nome home para isso, do tipo string com o valor null
if(home == null) {
brPrinc.GoHome();
}
else {
brPrinc.Navigate(home);
}
}
Adicione esses eventos manualmente no código, para habilitar os botões apenas quando tiver o voltar e o próximo:
private void brPrinc_CanGoBackChanged(object sender, EventArgs e) { // Tem que seguir essa regra de nome
btnVolt.Enabled = brPrinc.CanGoBack;
}
private void brPrinc_CanGoForwardChanged(object sender, EventArgs e) { // Idem acima
btnProx.Enabled = brPrinc.CanGoForward;
}
E nos eventos de clique de Voltar e Próximo, faça isso:
private void btnVolt_Click(object sender, EventArgs e) {
brPrinc.GoBack();
}
private void btnProx_Click(object sender, EventArgs e) {
brPrinc.GoForward();
}
Eventos de Parar, Atualizar e Pesquisar:
private void btnPar_Click(object sender, EventArgs e) {
brPrinc.Stop();
}
private void btnAtu_Click(object sender, EventArgs e) {
brPrinc.Refresh();
}
private void btnPesq_Click(object sender, EventArgs e) {
brPrinc.GoSearch();
}
E no Definir Home, coloque isso:
private void btnDef_Click(object sender, EventArgs e) {
home = txtUrl.Text.Trim();
}
PS: A Home padrão do programa é o MSN.
Para criar o instalador do programa C#, baixe o programa daqui: https://marketplace.visualstudio.com/items?itemName=visualstudioclient.MicrosoftVisualStudio2017InstallerProjects
Depois de instalado, abra o projeto desejado e em Gerenciador de Soluções, vá em adicionar projeto e procure a opção Setup Wizard, crie uma pasta com o nome "instalador" dentro do projeto e salve o projeto lá. Clique em Avançar e escolha a opção Setup Windows Application. Na janela que abrir, marque a opção "Saída Primária" pelo menos, mas pode marcar a maioria (só deixe desmarcado "Arquivos de Origem", "Símbolos de Depuração" e "Arquivos de Documentação"). Em Avançar, adicione os arquivos externos de DLL (em C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\PrivateAssemblies\x86\) dentro de pastas com o nome x86 ou x64 (assim como bancos de dados SQLite, XML, etc., no caso de banco de dados é a DLL SQLite.Interop.dll). Vá em concluir.
No projeto do instalador, vá em ApplicationFolder e adicione as pastas e os arquivos externos (como bancos SQLite). Podemos adicionar as DLLs faltantes também aí.
Em Applications Folder, vá nas propriedades e em AlwaysCreate deixe true pra criar menus, deixe a opção DefaultLocation como [ProgramFilesFolder]\[ProductName] (retire o Manufactore). Em Gerenciador de Soluções, vá nas propriedades com o nome do projeto do instalador. Em Author coloque seu nome, em Description coloque a Descrição, em Manufactore coloque seu nome também, em ProductName coloque o nome da pasta do programa, em Título coloque o nome do programa e em Version defina a versão. Clique no projeto do instalador, compile o instalador e ele já estará pronto (o arquivo é o com extensão .msi).
No caso de programas com SQLite, pode ser necessário adicionar essas linhas no arquivo csproj do projeto (arquivo de mesmo nome do projeto com a extensão csproj), na última linha antes do fechamento da tag Project:
<PropertyGroup>
<ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>
<CopySQLiteInteropFiles>false</CopySQLiteInteropFiles>
<CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles>
<CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles>
</PropertyGroup>
PS: Para adicionar o atalho no Desktop e Menu, deixe o AlwaysCreate como true em ambas as pastas, em Application Folders, crie o atalho para a Saída Primária e arraste eles pra User's Desktop e User's Programs Menu (configure o ícone do programa o caminho do executável e o target para Saída Primária).