Estou usando, System.Windows.Forms
mas estranhamente não tenho a capacidade de criá-los.
Como posso obter algo como uma caixa de diálogo de prompt de javascript, sem javascript?
MessageBox é bom, mas não há como o usuário inserir uma entrada.
Quero que o usuário insira qualquer entrada de texto possível.
Respostas:
Você precisa criar sua própria caixa de diálogo Prompt. Você poderia talvez criar uma classe para isso.
E chamando de:
Atualização :
Adicionado botão padrão ( tecla enter ) e foco inicial com base em comentários e outra pergunta .
fonte
Adicione referência
Microsoft.VisualBasic
e use isso em seu código C #:Para adicionar a referência: clique com o botão direito do mouse em References na janela Project Explorer e, em seguida, em Add Reference, e marque VisualBasic nessa lista.
fonte
Interaction
que não existe no namespaceMicrosoft.VisualBasic
Não existe tal coisa nativamente no Windows Forms.
Você deve criar seu próprio formulário para isso ou:
use a
Microsoft.VisualBasic
referência.O Inputbox é um código legado trazido para o .Net para compatibilidade com VB6 - portanto, aconselho a não fazer isso.
fonte
Microsoft.VisualBasic.Compatibility
namespace.Microsoft.VisualBasic
é mais um conjunto de bibliotecas auxiliares em cima do .Net e não é nada específico do VB.Geralmente não é uma boa ideia importar as bibliotecas VisualBasic para programas C # (não porque elas não funcionem, mas apenas para compatibilidade, estilo e capacidade de atualização), mas você pode chamar Microsoft.VisualBasic.Interaction.InputBox () para exibir o tipo de caixa que você está procurando.
Se você pudesse criar um objeto Windows.Forms, seria melhor, mas você diz que não pode fazer isso.
fonte
VisualBasic
, mas isso é apenas em sua cabeça. Não há realidade nesse sentimento. Ele também seria chamado deMicrosoft.MakeMyLifeEasierWithAlreadyImplementedMethods
namespace.Microsoft.VisualBasic.Compatibility
sub-namespace, não tudo. Muitas funcionalidades "principais" estão incluídas noMicrosoft.VisualBasic
namespace; não vai a lugar nenhum. A Microsoft ameaçou "encerrar" o VB 6, não o VB.NET. Eles prometeram repetidamente que não vai a lugar nenhum. Algumas pessoas ainda não parecem ter descoberto a diferença ...Outra maneira de fazer isso: Supondo que você tenha um tipo de entrada TextBox, crie um formulário e tenha o valor textbox como uma propriedade pública.
No formulário principal, este será o código:
;
Dessa forma, o código parece mais limpo:
fonte
A resposta de Bas pode te colocar em problemas de memória, teoricamente, já que ShowDialog não será descartado. Acho que essa é a maneira mais adequada. Mencione também que o textLabel pode ser lido com um texto mais longo.
Implementação:
fonte
prompt
é nulo nesse ponto. Uma correção simples para permitir o cancelamento do prompt é substituirprompt.Dispose();
dentro depublic void Dispose()
porif (prompt != null) { prompt.Dispose(); }
Com base no trabalho de Bas Brekelmans acima, eu também criei duas derivações -> diálogos de "entrada" que permitem que você receba do usuário um valor de texto e um booleano (TextBox e CheckBox):
... e texto junto com uma seleção de uma das várias opções (TextBox e ComboBox):
Ambos requerem os mesmos usos:
Chame-os assim:
Chame-os assim:
fonte
A resposta de Bas Brekelmans é muito elegante em sua simplicidade. Mas, descobri que para um aplicativo real é necessário um pouco mais, como:
A classe aqui lida com essas limitações: http://www.codeproject.com/Articles/31315/Getting-User-Input-With-Dialogs-Part-1
Acabei de baixar o código-fonte e copiei InputBox.cs para o meu projeto.
Surpreso que não haja algo ainda melhor ... Minha única reclamação é que o texto da legenda não suporta novas linhas, pois usa um controle de rótulo.
fonte
Infelizmente, o C # ainda não oferece esse recurso nas bibliotecas internas. A melhor solução no momento é criar uma classe personalizada com um método que exibe um pequeno formulário. Se você estiver trabalhando no Visual Studio, pode fazer isso clicando em Projeto> Adicionar classe
Visual C # items> code> class
Nomeie a classe PopUpBox (você pode renomeá-la mais tarde, se quiser) e cole o seguinte código:
Você precisará alterar o namespace para o que estiver usando. O método retorna uma string, então aqui está um exemplo de como implementá-lo em seu método de chamada:
Este método verifica a string retornada para um valor de texto, string vazia ou "cancel" (o método getUserInput retorna "cancel" se o botão cancelar é clicado) e age de acordo. Se o usuário não inserir nada e clicar em OK, isso informará ao usuário e perguntará se deseja cancelar ou inserir novamente o texto.
Postar notas: em minha própria implementação, descobri que todas as outras respostas estavam faltando 1 ou mais dos seguintes:
Assim, postei minha própria solução. Espero que alguém ache útil. Agradecemos aos comentaristas do Bas e do Gideon + por suas contribuições, vocês me ajudaram a encontrar uma solução viável!
fonte
aqui está minha versão refatorada que aceita multilinha / simples como opção
fonte
Aqui está um exemplo em VB.NET
fonte